导航到错误的片段



我有一个底部导航栏的主活动。这个底部导航栏包含3个目的地。

回家
  • <
  • 我的路线/gh>语言>

当活动第一次启动时,它在Home中打开HomeFragment。这个HomeFragment有一些按钮可以导航到不同的fragment。(仍在Home)

假设我进入HomeFragment ->TourFragment→ReadyRoutesFragment(全部在Home中)然后按后退键。

但是假设我去了HomeFragment→TourFragment→ReadyRoutesFragment→按下底部导航栏的My Routes按钮->MyRoutesFragment(最后一个在MyRoutes中)然后按下返回按钮,而不是回到ReadyRoutesFragment,我得到HomeFragment。

我使用导航组件来处理导航,没有覆盖任何回按功能。我在同一底部导航栏目的地的片段之间导航时使用定义的操作。

然而,如果我做同样的事情(HomeFragment->TourFragment→ReadyRoutesFragment→按下底部导航栏的My Routes按钮->MyRoutesFragment),但不是按后退键,而是按Home键,然后显示ReadyRoutesFragment。

主导航图:

<navigation
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/main_navigation"
app:startDestination="@id/homeFragmentStart">
<include app:graph="@navigation/home_navigation" />
<fragment
android:id="@id/myRoutesFragment"
android:name="com.example.extoryapp.Main.MyRoutesPage.MyRoutesFragment"
android:label="MyRoutesFragment" >
</fragment>
<fragment
android:id="@id/languagesFragment"
android:name="com.example.extoryapp.Main.LanguagesPage.LanguagesFragment"
android:label="LanguagesFragment" />

home_navigation图:

<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@id/homeFragmentStart"
app:startDestination="@id/homeFragment">
<fragment
android:id="@+id/homeFragment"
android:name="com.example.extoryapp.Main.HomePage.HomeFragment"
android:label="HomeFragment" >
<action
android:id="@+id/action_homeFragment_to_tourFragment"
app:destination="@id/tourFragment"/>
</fragment>
<fragment
android:id="@+id/tourFragment"
android:name="com.example.extoryapp.Main.InformationPages.TourFragment"
android:label="TourFragment" >
<action
android:id="@+id/action_tourFragment_to_routeCreationFragment"
app:destination="@id/routeCreationFragmentMain"/>
<action
android:id="@+id/action_tourFragment_to_readyRoutesFragment"
app:destination="@id/readyRoutesFragment" />
<action
android:id="@+id/action_tourFragment_to_destinationFragment"
app:destination="@id/destinationFragment" />
</fragment>
<fragment
android:id="@+id/routeCreationFragmentMain"
android:name="com.example.extoryapp.Main.RouteCreationPages.RouteCreationFragment"
android:label="RouteCreationFragment" />
<fragment
android:id="@+id/readyRoutesFragment"
android:name="com.example.extoryapp.Main.InformationPages.ReadyRoutesFragment"
android:label="ReadyRoutesFragment" >
<action
android:id="@+id/action_readyRoutesFragment_to_routeCreationFragment"
app:destination="@id/routeCreationFragmentMain" />
</fragment>
<fragment
android:id="@+id/destinationFragment"
android:name="com.example.extoryapp.Main.InformationPages.DestinationFragment"
android:label="DestinationFragment" >
<action
android:id="@+id/action_destinationFragment_to_imageDetailFragment"
app:destination="@id/imageDetailFragment" />
</fragment>
<fragment
android:id="@+id/imageDetailFragment"
android:name="com.example.extoryapp.Main.InformationPages.ImageDetailFragment"
android:label="ImageDetailFragment" />
override fun onBackPressed() {
val mainNavigationBar=findViewById<BottomNavigationView>(R.id.mainNavigationBar)
val mainFragmentView = supportFragmentManager.findFragmentById(R.id.mainFragmentView) as NavHostFragment
val navController = mainFragmentView.navController
if(navController.currentDestination?.label=="MyRoutesFragment" || navController.currentDestination?.label=="LanguagesFragment")
mainNavigationBar.selectedItemId=R.id.homeFragmentStart
else
super.onBackPressed()
}

我将这段代码添加到我的MainActivity。如果在我的路由或语言中按下后退键,我只需导航到Home,而不是处理后退。

这是我想到的一个解决方案。但如果有任何其他建议,我将很乐意听取。

相关内容

  • 没有找到相关文章

最新更新