Как отключить функциональность кнопки «Назад», пока задача не будет завершена внутри фрагмента?

#android #android-layout #android-fragments #android-activity #kotlin-coroutines

#Android #android-layout #android-фрагменты #android-активность #kotlin-сопрограммы

Вопрос:

Я использую одиночное действие в качестве контейнера для своих фрагментов, мой второй фрагмент в своем методе onCreate запускает цикл for в области сопрограммы, но если пользователь нажимает системную кнопку возврата, приложение вылетает с исключением нулевого указателя…Как я могу отключить функциональность кнопки «Назад» до завершения моей сопрограммной работы?

 override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    setClickListeners()
    //This creates buttons on the layout dynamically
    GlobalScope.launch(Dispatchers.Main) {
        delay(100)
        for (i in 0 until runTillAndHowMany) {
            createButton()
            delay(25)
        }
    }

}
  

Я знаю, что это слишком неправильно для использования GlobalScope подобным образом в onCreate, но не нашел альтернативы, я хочу, чтобы анимация пользовательских кнопок создавалась одна за другой на экране.

Я использую библиотеку NavigationComponent и анимации перехода

Ответ №1:

Вы могли бы создать логическую переменную для обработки этого. Итак, в вашей деятельности вы можете объявить это следующим образом:

 var shouldGoBack: Boolean = false
  

И затем вы переопределяете свой метод onBackPressed следующим образом

 override fun onBackPressed() {
   if(shouldGoBack)
     super.onBackPressed()
}
  

Наконец, вы получаете доступ к переменной в своем фрагменте и устанавливаете для нее значение true, как только сопрограмма будет выполнена следующим образом:

 (activity as YourActivity).shouldGoBack = true
  

Дайте мне знать, если это сработает!

Комментарии:

1. Это сработало, мне также пришлось снова сбросить логическое значение на false, как только я вернусь из фрагмента, прямо сейчас я пишу эту строку (activity as YourActivity).shouldGoBack = true в цикле for, который создает кнопку, с этим условием if (i == runTillAndHowMany-1)