You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio:实现从Profile Activity向Settings Activity传递并显示用户数据与图片

Android 两个Activity数据同步实现方案

一、启动Profile Activity并监听返回结果

方法1:新版Activity Result API(推荐)

在Settings Activity中注册结果监听器,用来启动Profile并接收返回数据:

// SettingsActivity.kt
private val profileLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
    if (result.resultCode == RESULT_OK) {
        val data = result.data ?: return@registerForActivityResult
        // 解析返回的数据
        val name = data.getStringExtra("EXTRA_NAME")
        val phone = data.getStringExtra("EXTRA_PHONE")
        val imageUri = data.getParcelableExtra<Uri>("EXTRA_IMAGE_URI")
        
        // 更新Settings页面UI
        nameTextView.text = name
        phoneTextView.text = phone
        imageUri?.let {
            profileImageView.setImageURI(it)
        }
    }
}

// 调用此方法打开Profile Activity
fun openProfileActivity() {
    val intent = Intent(this, ProfileActivity::class.java)
    profileLauncher.launch(intent)
}

方法2:旧版startActivityForResult(兼容低版本参考)

// SettingsActivity.kt
companion object {
    private const val REQUEST_CODE_PROFILE = 1001
}

fun openProfileActivity() {
    val intent = Intent(this, ProfileActivity::class.java)
    startActivityForResult(intent, REQUEST_CODE_PROFILE)
}

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    if (requestCode == REQUEST_CODE_PROFILE && resultCode == RESULT_OK) {
        data?.let {
            val name = it.getStringExtra("EXTRA_NAME")
            val phone = it.getStringExtra("EXTRA_PHONE")
            val imageUri = it.getParcelableExtra<Uri>("EXTRA_IMAGE_URI")
            
            // 更新UI
            nameTextView.text = name
            phoneTextView.text = phone
            imageUri?.let { uri ->
                profileImageView.setImageURI(uri)
            }
        }
    }
}

二、在Profile Activity中处理返回数据

重写返回键逻辑,把用户输入的信息和图片Uri打包返回:

// ProfileActivity.kt
private var selectedImageUri: Uri? = null // 保存选中的图片Uri

override fun onBackPressed() {
    // 获取用户输入内容
    val name = nameEditText.text.toString().trim()
    val phone = phoneEditText.text.toString().trim()
    
    // 打包数据到Intent
    val resultIntent = Intent().apply {
        putExtra("EXTRA_NAME", name)
        putExtra("EXTRA_PHONE", phone)
        putExtra("EXTRA_IMAGE_URI", selectedImageUri)
    }
    
    // 设置返回结果并关闭页面
    setResult(RESULT_OK, resultIntent)
    finish()
    super.onBackPressed()
}

三、图库选图补充实现

在Profile Activity中添加选图逻辑,获取图片Uri:

// ProfileActivity.kt
companion object {
    private const val REQUEST_CODE_PICK_IMAGE = 1002
}

// 绑定选图按钮点击事件
galleryPickBtn.setOnClickListener {
    val pickIntent = Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
    startActivityForResult(pickIntent, REQUEST_CODE_PICK_IMAGE)
}

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    super.onActivityResult(requestCode, resultCode, data)
    if (requestCode == REQUEST_CODE_PICK_IMAGE && resultCode == RESULT_OK) {
        selectedImageUri = data?.data
        // 预览选中的图片
        profilePreviewImg.setImageURI(selectedImageUri)
    }
}

注意:Android 10及以上版本建议直接使用Uri传递图片,避免文件权限问题。

内容的提问来源于stack exchange,提问作者Mariam Farooqi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 23:05:21