Android kotlin – registerForActivityResult не работает

avatar
Eduard Unruh
1 июля 2021 в 19:14
678
1
0

Поскольку 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)

Это просто не работает! Как это сделать правильно?

Источник
ianhanniballake
1 июля 2021 в 19:21
1

Вы создаете свой модуль запуска внутри метода или вы создаете его как переменную-член в вашем классе?

Eduard Unruh
1 июля 2021 в 19:22
0

То, что вы видите в действии A, находится внутри OnCreate.

Eduard Unruh
1 июля 2021 в 19:24
0

Так же пробовал ставить лаунчер вне OnCreate, а именно над ним

Ответы (1)

avatar
vijay kumar
2 июля 2021 в 05:57
0

Написанный вами код на 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 или действия

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