Finish () не закрывает мою вторую активность, OnBackPressed () ломает приложение - PullRequest
0 голосов
/ 07 октября 2019

В MainActivity я открываю новую активность, подобную этой

 val intent = Intent(context, ExerciseCatalogueActivity::class.java)
            startActivityForResult(intent, REQUEST_CODE)

Затем у меня есть метод clickListener, вызывающий метод в моей второй активности

holder.itemView.setOnClickListener {
            exerciseClickListener.exerciseIsClicked(currentExercise)
        }

Наконец я пытаюсь передать currentExerciseв MainActivity и завершите второе действие следующим образом

override fun exerciseIsClicked(exercise: Exercise) {
        setResult(Activity.RESULT_OK, Intent().apply{ putExtra("key", exercise) })

        finish()
    }

К сожалению, ничего не происходит, пока я не нажму кнопку «Назад», которая завершает второе действие. Если я делаю это программно с onBackPressed, я получаю ошибку Fragment host is destroyed

1 Ответ

0 голосов
/ 08 октября 2019

Вы уже начали ExerciseCatalogueActivity следующим образом:

val intent = Intent(context, ExerciseCatalogueActivity::class.java)
startActivityForResult(intent, REQUEST_CODE)

Теперь, во втором упражнении (ExerciseCatalogueActivity), отправьте данные следующим образом:

val result = Intent()
result.putExtra("key", exercise)
setResult(Activity.RESULT_OK, result)
finish()

Затем обработайте результат в вашем MainActivity следующим образом:

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) {
    if (requestCode == REQUEST_CODE) {
        if (resultCode == Activity.RESULT_OK) {
            val task = data?.getStringExtra("key")
            task?.let {
                 //Do something here with the returned value
            }
    }
}
...