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

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
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 » » в форуме Android
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • При использовании navGraphViewModels с графом навигации на основе Kotlin DSL приложение аварийно завершает работу.
    Anonymous » » в форуме Android
    0 Ответы
    68 Просмотры
    Последнее сообщение Anonymous
  • Kotlin Android аварийно завершает работу при создании запроса OkHttp
    Anonymous » » в форуме Android
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Kotlin Android аварийно завершает работу при создании запроса OkHttp
    Anonymous » » в форуме Android
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Kotlin Android аварийно завершает работу при создании запроса OkHttp
    Anonymous » » в форуме Android
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous

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