Android Navigation - Removing Action Bar Back Button When Popping Back Stack
我要做什么
我正在使用Android导航组件来处理我的应用中的导航。在此示例中,我有两个屏幕,屏幕A和屏幕B。
我希望用户能够单击屏幕A中的按钮并能够导航到屏幕B;然后被阻止返回上一个屏幕(屏幕A)。
问题
当用户从屏幕A导航到屏幕B时,操作栏上的"后退"按钮仍允许用户返回上一屏幕,但是,当单击底部栏中的"后退"按钮时,它将退出应用程序,因此零件正常。
要删除操作栏中的后退按钮,我需要做什么?
到目前为止我读过的内容
我遵循了这三篇文章中的指导,但我认为它们可能会忽略
-
Stackoverflow-导航到后如何清除导航堆栈
Android中的另一个片段 - Android开发人员指南-条件导航
- Android开发人员指南-导航至目的地
我的代码
导航图-nav_graph.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <?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-这充当我的"单活动"导航主机。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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中):
1 | private lateinit var appBarConfiguration: AppBarConfiguration |
在onCreate方法内添加以下行:
1 2 3 4 5 6 7 8 9 10 11 12 13 | .... val drawerLayout: DrawerLayout = findViewById(R.id.drawer_layout) ... ... appBarConfiguration = AppBarConfiguration( setOf([**ID of the fragment layout you want without back button**], ), drawerLayout ) setupActionBarWithNavController(navController, appBarConfiguration) navView.setupWithNavController(navController) .... |
这样,您的片段将成为根片段,并且后退按钮将被删除。希望对您有所帮助。
尝试在创建屏幕b片段时禁用主页按钮:
1 2 3 4 5 6 | override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? { var rootView = inflater?.inflate(R.layout.fragment_screen_b, container, false) (activity as AppCompatActivity).supportActionBar!!.setDisplayHomeAsUpEnabled(false) return rootView } |
如果它不起作用,请尝试使用
如果不起作用,请尝试在下面添加以下内容:
1 | setHasOptionsMenu(false) |