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
相关产品推荐
相关产品推荐

