gpt4 book ai didi

android - 导航组件 Kotlin - 无法从当前目的地找到

转载 作者:行者123 更新时间:2023-12-02 12:23:20 25 4
gpt4 key购买 nike

我有一个 fragment A,B,C。从 A -> B 导航时没问题,但从 B -> C 时它会崩溃。
这是我的导航
enter image description here
这是我的导航代码

 categoryProductItemListAdapter.setOnItemClickListener {
val action = CategoryProductItemsDirections.actionCategoryProductItems2ToProductItem(null, it)
navController = Navigation.findNavController(requireView())
navController?.navigateUp()
navController?.navigate(action)
}
这是 productItem 目的地的 XML 代码
<fragment
android:id="@+id/categoryProductItems2"
android:name="com.sample.store.main.dashboard.ui.ui.home.categoryitems.CategoryProductItems"
android:label="CategoryProductItems"
tools:layout="@layout/fragment_category_product_items">
<argument
android:name="category_global"
app:argType="com.sample.store.data.globalmodels.response.categories.Category" />
<action
android:id="@+id/action_categoryProductItems2_to_productItem"
app:destination="@id/productItem"
app:enterAnim="@anim/enter_from_right"
app:exitAnim="@anim/exit_to_right"
app:popEnterAnim="@anim/fragment_open_enter"
app:popExitAnim="@anim/fragment_fade_exit" />
</fragment>
这是错误:
java.lang.IllegalArgumentException: Navigation action/destination com.sample.store.full:id/action_categoryProductItems2_to_productItem cannot be found from the current destination Destination(id/navigation_home) label=Home class=com.sample.store.main.dashboard.ui.ui.home.mainui.HomeFragment
我不知道发生了什么,但似乎 navController 正在寻找“navigation_home”

最佳答案

这更像是一个提醒而不是一个答案。但我希望它有所帮助。
摘要:(正如其他人已经说过的那样:)对导航函数的连续调用是大多数这些异常的原因。
鉴于 android 组件的结构,特别是 MediatorLiveData 的工作方式,人们有时可能希望将数据节点加入单个可观察数据持有者 (LiveData)。
如果对该中介的观察与动态导航功能相关联,那么无疑会出现错误。
原因是源可以连续更改 LiveData 值的次数等于连接到中介的源的数量。
这是一个非常好的主意,但是。对 NavController 的反复更改肯定会导致不良结果。
这可能包括:

  • 弹出 backStack 两次。
  • 连续两次从 A -> B 给出 A 未找到的异常
    第二次。

  • 这是一个很大的测试问题,特别是因为一个 Fragment 的问题可能会级联到底层堆栈,因此当一个 Fragment 中可能出现 Direction not found 异常时,真正的罪魁祸首可能在给出的那个的 TOP 上的 Fragment异常(exception)。
    实际上,这可以通过创建一个自取消线程执行器来轻松解决 scheduled.cancel(true);对 mediatorLiveData 本身具有延迟容差(准确地说是 onChange,而不是 setValue(),因为急切的内部状态更新是调解器恕我直言的全部和唯一目的/笑话(对不起,不允许 postValue()!))。
    更不用说调解器本身是一个不完整的组件......
    另一种更简单的方法是确保当且仅当 !Object::Equals 时才执行来自 MutableLiveData 的 onChange 调用,并防止重复调用 onChange(),这仍然是 MediatorLiveData/LiveData 不完整的证明。 (对列表要格外小心)
    不惜一切代价避免对 NavController 执行连续调用,如果你必须,那么延迟的可运行可能是你实现它的唯一方法。

    关于android - 导航组件 Kotlin - 无法从当前目的地找到,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63805655/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com