如何从片段中打开的临时活动返回数据



基本上,我有一个MainActivity,它包含3个不同的片段,在其中一个片段中,我可以单击一个按钮,通过简单的RadioGroup选项打开一个新的活动,每当我单击其中一个选项时,它就会自动关闭该活动。现在,我的问题是将所选的数据传输到片段,这样我就可以根据我选择的RadioButton来更新它。

我最接近的解决方案是startActivityForResult,但它似乎不再有效。。。

来自官方指南文档:

在你的片段中,创建&注册启动器

private val launcher = registerForActivityResult(
ActivityResultContracts.StartActivityForResult()
) { result: ActivityResult ->
handleResult(result)
}

创建一个处理ActivityResult:的方法

fun handleResult(result: ActivityResult) {
// Handle the returned result as you do in onActivityResult()
// Use result.resultCode to determine OK or Cancelled result
if (result.resultCode == Activity.RESULT_OK) {
val resultIntent = result.data
// Use returned Intent
}
}

启动OtherActivity以获得如下结果:

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
// ...
val selectButton = findViewById<Button>(R.id.select_button)
selectButton.setOnClickListener {
// Launch activity from whom you want the result
val intent = Intent(requireContext(), OtherActivity::class.java)
launcher.launch(intent)
}
}

OtherActivity中,当您准备好发回结果时,创建一个意向并将数据放入其中

val intent = Intent()
intent.putExtra("YOUR_KEY", YOUR_DATA_HERE)
setResult(Activity.RESULT_OK, intent)
finish()

之后,您将在handleResult()方法中得到结果。

您可以使用SharedPreferences来保存单选按钮的状态,也可以创建一个回调函数,在处理片段时触发主活动,并将单选按钮状态作为参数传递。

最新更新