导航组件currentDestination在按下后退按钮之后为null

特里斯坦·迪彭丹(Tristan Diependael)

我已经使用导航组件(v2.3.2)实现了导航流程。当我第一次测试流程时,一切正常。但是,当我按“后退”按钮返回到主页片段并再次尝试测试流时,由于currentDestination为null,应用程序崩溃了。当我按下后退按钮时,导航组件似乎卡住了。

错误:

java.lang.IllegalArgumentException:导航操作/目标com.tridie2000.myapp:id / action_fragmentA_to_fragmentB不能从当前目的地Destination(com.tridie2000.myapp:id / fragmentB)label = b_fragment class = com.tridie2000.myapp.presentation .fragments.BFragment

这是我在MainActivity中配置导航组件的方式:

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        setupBottomNavBar()
        setupNavigationUI()
    }

    override fun onCreateOptionsMenu(menu: Menu): Boolean {
        val inflater: MenuInflater = menuInflater
        inflater.inflate(R.menu.main_menu, menu)
        return true
    }

    override fun onOptionsItemSelected(item: MenuItem): Boolean {
        val navController = findNavController(R.id.nav_host_fragment)
        return item.onNavDestinationSelected(navController) || super.onOptionsItemSelected(item)
    }

    private fun setupBottomNavBar() {
        val navController = findNavController(R.id.nav_host_fragment)
        val bottomNav = findViewById<BottomNavigationView>(R.id.bottom_navigation)
        bottomNav.setupWithNavController(navController)
    }

    override fun onSupportNavigateUp(): Boolean {
        val navController = findNavController(R.id.nav_host_fragment)
        return navController.navigateUp()
    }

    private fun setupNavigationUI() {
        val navController = findNavController(R.id.nav_host_fragment)
        setupActionBarWithNavController(navController)
    }
}

这是MainActivity的布局代码:

<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".presentation.activities.MainActivity">

    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/bottom_navigation"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:background="@color/themeColor"
        app:itemIconTint="@drawable/my_nav_bar_item_color"
        app:itemTextColor="@drawable/my_nav_bar_item_color"
        app:labelVisibilityMode="labeled"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:menu="@menu/main_tabbar_menu" />

    <fragment
        android:id="@+id/nav_host_fragment"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:defaultNavHost="true"
        app:layout_constraintBottom_toTopOf="@+id/bottom_navigation"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:navGraph="@navigation/nav_graph"
        tools:ignore="FragmentTagUsage" />

</androidx.constraintlayout.widget.ConstraintLayout>
特里斯坦·迪彭丹(Tristan Diependael)

好的,经过进一步的挖掘,我发现了我的应用崩溃的原因。在早期版本的导航组件中,错误为:

此NavController不知道操作

新错误(从v2.3开始)是:

无法从当前目的地找到动作/目的地

彼此多次执行findNavController()。navigate(action)时,将触发此事件。

我正在使用RxJava,观察者多次触发,导致此错误。

修复我的RxJava实现后,我的导航流程运行正常。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

导航视图-在按下后退按钮时选中更新项目

来自分类Dev

音乐服务停止在按下后退按钮

来自分类Dev

离子 3:如何使 ionViewWillEnter 仅在按下后退按钮时?

来自分类Dev

在按下按钮时搜索NULL值

来自分类Dev

Android导航架构组件-系统的后退按钮退出应用

来自分类Dev

使用EarlGrey按下导航栏上的“后退”按钮

来自分类Dev

检测导航栏中的默认后退按钮是否被按下

来自分类Dev

如何防止在按下后退按钮时重新激活singleTask活动?

来自分类Dev

防止在按下Android后退按钮时关闭软键盘

来自分类Dev

[React Native / Android]:如何正确处理MainActivity在按下后退按钮时遭到破坏?

来自分类Dev

jQuery mobile要在按下后退按钮时擦除数据

来自分类Dev

如何在按下后退按钮时返回到先前打开的选项卡

来自分类Dev

为什么我的插页式广告会在按下后退按钮时显示?安卓

来自分类Dev

在按钮下

来自分类Dev

按下导航控制器后退按钮时如何导航到其他View Controller?

来自分类Dev

后退导航按钮无功能

来自分类Dev

SwiftUI导航多个后退按钮

来自分类Dev

导航栏后退按钮重复

来自分类Dev

后退导航按钮不显示

来自分类Dev

带片段的后退按钮导航

来自分类Dev

__EVENTTARGET在按钮单击的回发后为空

来自分类Dev

我固定的垂直导航栏正在按下我的按钮吗?如何解决?

来自分类Dev

通过导航控制器ios按下后退按钮时刷新主页

来自分类Dev

Xcode:检测何时按下导航控制器实现的“后退按钮”

来自分类Dev

使用导航控制器按下后退按钮后,如何防止之前的片段出现?

来自分类Dev

硬件后退按钮和导航栏后退按钮之间的区别

来自分类Dev

检测按下后退按钮

来自分类Dev

检测按下后退按钮

来自分类Dev

在按下按钮时将输入值发送到单独的组件-AngularJS

Related 相关文章

  1. 1

    导航视图-在按下后退按钮时选中更新项目

  2. 2

    音乐服务停止在按下后退按钮

  3. 3

    离子 3:如何使 ionViewWillEnter 仅在按下后退按钮时?

  4. 4

    在按下按钮时搜索NULL值

  5. 5

    Android导航架构组件-系统的后退按钮退出应用

  6. 6

    使用EarlGrey按下导航栏上的“后退”按钮

  7. 7

    检测导航栏中的默认后退按钮是否被按下

  8. 8

    如何防止在按下后退按钮时重新激活singleTask活动?

  9. 9

    防止在按下Android后退按钮时关闭软键盘

  10. 10

    [React Native / Android]:如何正确处理MainActivity在按下后退按钮时遭到破坏?

  11. 11

    jQuery mobile要在按下后退按钮时擦除数据

  12. 12

    如何在按下后退按钮时返回到先前打开的选项卡

  13. 13

    为什么我的插页式广告会在按下后退按钮时显示?安卓

  14. 14

    在按钮下

  15. 15

    按下导航控制器后退按钮时如何导航到其他View Controller?

  16. 16

    后退导航按钮无功能

  17. 17

    SwiftUI导航多个后退按钮

  18. 18

    导航栏后退按钮重复

  19. 19

    后退导航按钮不显示

  20. 20

    带片段的后退按钮导航

  21. 21

    __EVENTTARGET在按钮单击的回发后为空

  22. 22

    我固定的垂直导航栏正在按下我的按钮吗?如何解决?

  23. 23

    通过导航控制器ios按下后退按钮时刷新主页

  24. 24

    Xcode:检测何时按下导航控制器实现的“后退按钮”

  25. 25

    使用导航控制器按下后退按钮后,如何防止之前的片段出现?

  26. 26

    硬件后退按钮和导航栏后退按钮之间的区别

  27. 27

    检测按下后退按钮

  28. 28

    检测按下后退按钮

  29. 29

    在按下按钮时将输入值发送到单独的组件-AngularJS

热门标签

归档