android 从片段导航时,底部导航栏故障

r9f1avp5  于 2023-02-17  发布在  Android
关注(0)|答案(3)|浏览(182)

我将底部导航栏与导航组件一起使用
为了使这两个组件一起工作,我调用了:

bottomNavigationView.setupWithNavController(navController)

除了从片段内部而不是底部导航栏导航时,一切都按预期工作

“查看全部”打开与底部导航栏中“报告”相同的片段

binding.viewAllScansTv.setOnClickListener {
    val action = MainFragmentDirections.actionMainFragmentToReportsFragment()
    navController.navigate(action)
}

点击“查看全部”后,片段打开,“报告”按钮被选中,但是,导航回“主页”不再起作用

我该如何修正这种奇怪的行为

导航图:

<navigation app:startDestination="@id/mainFragment">
    <fragment
        android:id="@+id/mainFragment"
        android:name="com.package.name.ui.main.MainFragment"
        android:label="MainFragment"> 
        <action                android:id="@+id/action_mainFragment_to_reportsFragment"
            app:destination="@id/reportsFragment" />
    </fragment>
</navigation>

底部导航菜单:

<menu>
    <item
        android:id="@+id/mainFragment"
        android:title="Home"/>    
    <item
        android:id="@+id/reportsFragment"
        android:title="Reports"/>
    <item
        android:id="@+id/settingsFragment"
        android:title="My account"/>
</menu>
hlswsv35

hlswsv351#

正如@ianhanniballake在评论中提到的那样,类似的问题也被发布在here
我最终做的是

val action = MainFragmentDirections.actionMainFragmentToReportsFragment()
navController.navigate(action)

val item = mainBottomNavigationView.menu.findItem(R.id.reportsFragment)
NavigationUI.onNavDestinationSelected(item, navController)

基本上,我使用x1m0 n1 API进行导航,以便正确跟踪回栈。

0ve6wy6x

0ve6wy6x2#

在任何视图上设置单击侦听器的效果都应该与用户点击底部导航中的相应项相同,因此需要在BottomNavigationView上调用setSelectedItemId()。
瓦尔主底部导航=活动?.findViewById(R.id.家庭底部导航)主底部导航?.selectedItemId = R.id.基础家庭片段

e3bfsja2

e3bfsja23#

你目前的答案是好的,但如果你需要传递参数,它不会工作,所以使用这个
在导航XML中,将以下行添加到操作

app:launchSingleTop="true"
app:popUpTo="@+id/main_navigation"
app:popUpToInclusive="true"

并确保app:popUpTo="@+id/main_navigation"与导航xml具有相同的id
因此,最终操作应如下所示:

<action
            android:id="@+id/action_cameraFragment_to_searchFragment"
            app:destination="@id/searchFragment"
            app:launchSingleTop="true"
            app:popUpTo="@+id/main_navigation"
            app:popUpToInclusive="true"/>

并使用以下操作正常导航

val action = CameraFragmentDirections.actionCameraFragmentToSearchFragment()
findNavController().navigate(action)

相关问题