Android registerForActivityResult not working



由于startActivityForResult已弃用,我尝试使新方法发挥作用。

这是在活动A:中

launcher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result: ActivityResult ->
Log.d(tagg, "returned")
if (result.resultCode == Activity.RESULT_OK) {
val data: Intent? = result.data
if (data != null) {
if (data.hasExtra("cats")) {
val cats = data.getStringExtra("cats")
}
}
}
}
chooseCategoryButton.setOnClickListener {
val i = Intent(this, ChooseCats::class.java)
launcher.launch(i)
}

活动B:

val finishIntent = Intent()
finishIntent.putExtra("cats", "blaaaaa")
setResult(RESULT_OK, finishIntent)

它就是不起作用!如何正确地做到这一点?

您编写的代码是100%正确的。只要确保

override fun onCreate(){
chooseCategoryButton.setOnClickListener {
val i = Intent(this, ChooseCats::class.java)
launcher.launch(i)
}
}
val launcher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result: ActivityResult ->
Log.d(tagg, "returned")
if (result.resultCode == Activity.RESULT_OK) {
val data: Intent? = result.data
if (data != null) {
if (data.hasExtra("cats")) {
val cats = data.getStringExtra("cats")
}
}
}

}

在活动B中,在一些onclick或action 中添加以下代码

override fun onClick(view : View) {
when(view.id){
R.id.mbtnClick -> {
val finishIntent = Intent()
finishIntent.putExtra("cats", "blaaaaa")
setResult(RESULT_OK, finishIntent)
}
}
}

最新更新