当我尝试从一个 fragment 导航到另一个 fragment 时,我遇到了新的 Android 导航架构组件的问题,我收到了这个奇怪的错误:
java.lang.IllegalArgumentException: navigation destination XXX
is unknown to this NavController
除了这个特定的导航之外,其他所有导航都可以正常工作。
我使用 Fragment 的 findNavController()
函数来访问 NavController
。
任何帮助将不胜感激。
最佳答案
在我的例子中,如果用户非常快速地两次点击同一个 View ,就会发生这种崩溃。所以你需要实现某种逻辑来防止多次快速点击......这很烦人,但似乎是必要的。
您可以在此处阅读有关防止这种情况的更多信息:Android Preventing Double Click On A Button
2019 年 3 月 19 日编辑:进一步澄清一下,这种崩溃并非完全可以通过“非常快速地单击两次相同的 View ”来重现。或者,您可以只用两根手指同时单击两个(或更多) View ,每个 View 都有自己的导航,它们将执行。当您有一个项目列表时,这尤其很容易做到。以上关于防止多次点击的信息将处理这种情况。
编辑 2020 年 4 月 16 日:以防您对阅读上面的 Stack Overflow 帖子不太感兴趣,我将包括我自己的 (Kotlin) 解决方案用了很久了。
OnSingleClickListener.kt
class OnSingleClickListener : View.OnClickListener {
private val onClickListener: View.OnClickListener
constructor(listener: View.OnClickListener) {
onClickListener = listener
}
constructor(listener: (View) -> Unit) {
onClickListener = View.OnClickListener { listener.invoke(it) }
}
override fun onClick(v: View) {
val currentTimeMillis = System.currentTimeMillis()
if (currentTimeMillis >= previousClickTimeMillis + DELAY_MILLIS) {
previousClickTimeMillis = currentTimeMillis
onClickListener.onClick(v)
}
}
companion object {
// Tweak this value as you see fit. In my personal testing this
// seems to be good, but you may want to try on some different
// devices and make sure you can't produce any crashes.
private const val DELAY_MILLIS = 200L
private var previousClickTimeMillis = 0L
}
}
ViewExt.kt
fun View.setOnSingleClickListener(l: View.OnClickListener) {
setOnClickListener(OnSingleClickListener(l))
}
fun View.setOnSingleClickListener(l: (View) -> Unit) {
setOnClickListener(OnSingleClickListener(l))
}
HomeFragment.kt
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
settingsButton.setOnSingleClickListener {
// navigation call here
}
}
关于android - IllegalArgumentException : navigation destination xxx is unknown to this NavController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51060762/