Android: двойной быстрый щелчок по любым представлениям, связанным с компонентом навигации, приводит к сбою приложения

У меня есть приложение, созданное с компонентом навигации. У меня есть поле на моем графике, которое перемещается вверх по фрагменту диалогового окна нижнего листа при нажатии на значок фильтра на панели инструментов. Однако, если я дважды щелкну очень быстро значок фильтра панели инструментов или очень быстро щелкну значок фильтра панели инструментов и любое другое представление, к которому привязана навигация, мое приложение вылетит со следующим сообщением об ошибке:

java.lang.IllegalArgumentException: navigation destination com.th3pl4gu3.locky:id/action_Fragment_Card_to_Fragment_View_Card is unknown to this NavController

Ниже приведен пример кода для моего значка фильтра панели инструментов.

override fun onOptionsItemSelected(item: MenuItem): Boolean {
    return when (item.itemId) {
        R.id.Toolbar_Filter -> {
                findNavController().navigate(CardFragmentDirections.actionFragmentCardToBottomSheetFragmentCardFilter())
            true
        }
        else -> false
    }
}

Это нормальное поведение для компонента архитектуры навигации?

Если нет, не могли бы вы предоставить мне исправление?


comment
Попробуйте прочитать это   -  person sergiy tikhonov    schedule 23.04.2020
comment
stackoverflow.com/questions/ 61393826/   -  person MMG    schedule 24.04.2020


Ответы (1)


currentId это CardFragment в navGraph определить идентификатор

fun Fragment.findNavControllerSafety(currentId: Int): NavController? {
    try {
        val controller = NavHostFragment.findNavController(this)

        if (controller.currentDestination?.id != currentId) {
            val name = controller.currentDestination?.let {
                Utils.getApp().resources.getResourceName(it.id)
            } ?: ""
            LogLogger.i("Navigation currentDestination not match: $name")
            return null
        }
        return controller
    } catch (e: Exception) {
        return null
    }
}
person Gavin Liu    schedule 27.08.2020
comment
Я думаю, это исправление работает, но я бы хотел, чтобы Google это исправил. - person TatiOverflow; 18.04.2021