我想做什么
我正在使用Android的导航组件来处理我的应用中的导航。在此示例中,我有两个屏幕,屏幕A和屏幕B。我希望用户能够单击屏幕A中的一个按钮,该按钮导航到屏幕B,然后阻止其返回上一个屏幕。
问题
[当用户从屏幕A导航到屏幕B时,操作栏上的后退按钮仍然允许用户返回上一屏幕,但是,当单击底部栏中的后退按钮时,它会退出应用程序,因此该部分可以。
为了删除操作栏中的后退按钮我需要做什么?
到目前为止我读过的内容
我遵循了这三篇文章中的指导,但我认为他们可能会忽略操作栏的后退按钮:
我的代码
导航图-nav_graph.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/screen_a">
<fragment
android:id="@+id/screen_a"
android:name="com.example.conditionalnavigation.AFragment"
android:label="screen A">
<action
android:id="@+id/action_AFragment_to_BFragment"
app:destination="@id/screen_b"
app:launchSingleTop="true"
app:popUpTo="@id/screen_a"
app:popUpToInclusive="true" />
</fragment>
<fragment
android:id="@+id/screen_b"
android:name="com.example.conditionalnavigation.BFragment"
android:label="screen B" />
</navigation>
MainActivity-这充当我的单项活动导航主机。
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
DataBindingUtil.setContentView<ActivityMainBinding>(this, R.layout.activity_main)
val navController = this.findNavController(R.id.myNavHostFragment)
NavigationUI.setupActionBarWithNavController(this, navController)
}
override fun onSupportNavigateUp(): Boolean {
val navController = this.findNavController(R.id.myNavHostFragment)
return navController.navigateUp()
}
}
在您的活动班级中,添加以下成员(在Kotlin中:)]]
private lateinit var appBarConfiguration: AppBarConfiguration
在onCreate方法内添加以下行:
.... val drawerLayout: DrawerLayout = findViewById(R.id.drawer_layout) ... ... appBarConfiguration = AppBarConfiguration( setOf([ID of the fragment layout you want without back button], ), drawerLayout ) ....
这样,您的片段将成为根片段,并且后退按钮将被删除。希望对您有所帮助。