Android 导航图从堆栈中删除了太多的后退按钮

问题描述 投票:0回答:1

我开始使用导航组件库并创建一个图形来在不同片段之间导航。我的基本设置是一个带有两个片段(A 和 B)的 BottomNavigationView。片段 B 可以深入到图形内部,到达片段 C,而片段 C 则转到片段 D。此时一切正常,返回堆栈从 D -> C -> B。

我的问题是 Fragment Z,它可以从活动上定义的工具栏菜单访问并由每个 Fragment 使用。我想要的是一条从 A -> B -> C -> D -> Z 的路径,通过按后退按钮,我想退回到片段 D。但是我转到图表的开头,即片段 A .

片段 Z 不使用任何操作。导航组件在导航图和 menu.xml 中检测到相同的fragment.id,并为我进行导航。所以无法为我定义一些多后栈魔法。

导航.xml

<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/nav_graph"
app:startDestination="@id/fragmentA">

<fragment android:id="@+id/fragmentA" />

<fragment android:id="@+id/fragmentZ" />

<fragment
    android:id="@+id/fragmentB">

    <action
        android:id="@+id/action_b_to_c"
        app:destination="@id/fragmentC" />
</fragment>

<fragment
    android:id="@+id/fragmentC">

    <action
        android:id="@+id/action_c_to_d"
        app:destination="@id/fragmentD" />
</fragment>
</navigation>

toolbar_menu.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto">
<item
    android:id="@+id/fragmentZ"
    android:title="Go to Z"
    app:showAsAction="always" />
</menu>

bottom_navigation.xml

<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="single">
    <item
        android:id="@+id/fragmentA"
        android:title="Go to A" />
    <item
        android:id="@+id/fragmentB"
        android:title="Go to B" />
</group>
</menu>

主要活动

class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView( R.layout.activity_main )
    val toolbar: MaterialToolbar = findViewById(R.id.toolbar)
    setSupportActionBar(toolbar)
    val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment
    val navController = navHostFragment.navController
    val navView: BottomNavigationView = findViewById( R.id.bottomNavigation )
    navView.setupWithNavController( navController )
}

override fun onCreateOptionsMenu(menu: Menu?): Boolean {
    menuInflater.inflate(R.menu.menu_toolbar, menu)
    return super.onCreateOptionsMenu(menu)
}

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

}

android android-fragments navigation android-jetpack-navigation
1个回答
0
投票

NavigationUI.onNavDestinationSelected()
读作:

  • 默认情况下,返回堆栈将弹出回导航图的起始目的地。

  • 具有

    android:menuCategory="secondary"
    的菜单项不会弹出后堆栈。

另请参阅:导航和返回堆栈

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.