#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)