Мое приложение Kotlin аварийно завершает работу при изменении фрагментовAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Мое приложение Kotlin аварийно завершает работу при изменении фрагментов

Сообщение Anonymous »

Мое приложение Kotlin аварийно завершает работу, когда я меняю фрагменты, позвольте мне объяснить.
В моем приложении есть несколько фрагментов, которые являются моими страницами, в своих фрагментах я ссылаюсь на представление XML с помощью viewBinding< /code> вот так:

Код: Выделить всё

private var binding: MyFragmentBinding by autoCleared()
Я сделал несколько вызовов API и другую обработку в onViewCreated (которая работает отлично), пока все не стало хорошо, но теперь, если я нажму кнопку «Назад» на телефоне до того, как элементы будут закончил загрузку, приложение вылетает с ошибкой :

Код: Выделить всё

FATAL EXCEPTION: main (Ask Gemini)
Process: fr.trecobat.brick, PID: 6594
java.lang.IllegalStateException: should never call auto-cleared-value get when it might not be available
at fr.trecobat.brick.utils.AutoClearedValue.getValue(AutoClearedValue.kt:32)
fr.trecobat.brick.ui.itineraire_chantiers.ItineraireChantiersFragment.getBinding(ItineraireChantiersFragment.kt:198)
Проблема в том, что я пытаюсь получить доступ к привязке при уничтожении фрагмента.
Точно так же, если я рассылаю спам на телефон кнопку назад, думаю, что предыдущий фрагмент не успевает загрузиться и возвращаюсь к предыдущему фрагменту, поэтому приложение вылетает с такой ошибкой:

Код: Выделить всё

FATAL EXCEPTION: main (Ask Gemini)
Process: fr.trecobat.brick, PID: 26518
java.lang.IllegalArgumentException: Navigation action/destination fr.trecobat.brick:id/action_tourneeFragment_to_selectionChantierFragment cannot be found from the current destination Destination(fr.trecobat.brick:id/selectionChantierFragment) label=SelectionChantierFragment class=fr.trecobat.brick.ui.selection_chantier.SelectionChantierFragment
at fr.trecobat.brick.ui.tournee.TourneeFragment$onViewCreated$3.handleOnBackPressed(TourneeFragment.kt:176)
На данный момент я попробовал эти два решения.
Я заменил строку, которая автоматически очищает привязку, на эту:

Код: Выделить всё

private var binding: MyFragmentBinding by notNull()
Кажется, это работает, но я теряю самоочистку и потенциально подвергаюсь утечкам памяти, верно?
Для второго варианта в моем onBackPressedDispatcher< /code> Я установил таймер:

Код: Выделить всё

requireActivity().onBackPressedDispatcher.addCallback(
viewLifecycleOwner,
object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
if (canNavigate) {
canNavigate = false
handler.postDelayed({ canNavigate = true }, 300)  // 300ms

findNavController().navigate(
R.id.action_itineraireChantiersFragment_to_tourneeAffairesFragment,
bundleOf(
"touId" to touId,
)
)
}else{
Timber.e("Stop back")
}
}
}
)
Это позволяет избежать агрессивного переключения страниц, но является ли это правильным решением?
Есть ли у вас лучшие решения моих проблем?

Подробнее здесь: https://stackoverflow.com/questions/787 ... -fragments
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Мое приложение Kotlin аварийно завершает работу при изменении фрагментов
    Anonymous » » в форуме JAVA
    0 Ответы
    11 Просмотры
    Последнее сообщение Anonymous
  • При использовании navGraphViewModels с графом навигации на основе Kotlin DSL приложение аварийно завершает работу.
    Anonymous » » в форуме Android
    0 Ответы
    68 Просмотры
    Последнее сообщение Anonymous
  • Kotlin Android аварийно завершает работу при создании запроса OkHttp
    Anonymous » » в форуме Android
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Kotlin Android аварийно завершает работу при создании запроса OkHttp
    Anonymous » » в форуме Android
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Kotlin Android аварийно завершает работу при создании запроса OkHttp
    Anonymous » » в форуме Android
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Android»