我在我的布局文件中使用数据绑定(bind)设置了一个点击监听器,如下所示:
android:onClick="@{() -> storeCallback.onStoreClick(store)}"
在我的 fragment 中,我这样定义了这个类:
class StoreClick(val block: (StoreModel) -> Unit) {
/**
* Called when a store is clicked
*
* @param store the store that was clicked
*/
fun onStoreClick(store: StoreModel) = block(store)
}
我在适配器中这样调用它:
StoreClick {
// When a store is clicked this block or lambda will be called by MyAdapter
val action =
MyFragmentDirections.actionHomeToStoreDetailFragment(it.storeID)
findNavController().navigate(action)
})
配置更改之前一切正常。但是,在旋转设备并点击适配器中的商店项目后,应用程序因 findNavController
崩溃并出现以下错误:
no current navigation code
有什么想法吗?
更新:我在 AOSP 中检测到错误 here .但是,目前尚不清楚这种情况下发生了什么。
最佳答案
对于任何有兴趣的人,我解决了这个问题。 Android Studio Canary 中的 Lint 告诉我在 NavHost Activity xml 布局中使用 FragmentContainerView 而不是 Fragment
。这就是导致问题的原因。一旦我将 NavGraph 的封闭标记改回 Fragment
,它就起作用了:
关于Android 导航 Controller 错误 `no current navigation code`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58755267/