我的导航组件有问题。我想知道我的想法是否正确。
我有main_activity
,A_activity
,B_activity
。Main
是A
和B
的父级。
每个活动(A
,B
(应该拥有自己的NavHostFragment
(A
和B
都有许多片段,例如列表,详细信息等(
示例流:main
-> A
-> listA
-> detailA
。
后退按钮可以正常工作。
问题:
如何在片段和A
活动中实现导航(工具栏箭头(?
是否可以从第一个片段listA
返回到主?
使用许多导航组件正确的解决方案(每个A
,B
...活动(?
在我的第一个片段中,我没有导航选项。如何启用?
活动代码:
private void setUp() {
setSupportActionBar(mActivityTrainingBinding.toolbar);
if (getSupportActionBar() != null) {
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
}
NavController navController = Navigation.findNavController(this, R.id.fragment_container);
NavigationUI.setupActionBarWithNavController(this, navController);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == android.R.id.home) {
Navigation.findNavController(this, R.id.fragment_container).navigateUp();
return true;
}
return true;
}
@Override
public boolean onSupportNavigateUp() {
return Navigation.findNavController(this, R.id.fragment_container).navigateUp();
}
清单代码:
<activity
android:name=".ui.training.TrainingActivity" />
导航代码:
<?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"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/nav_graph_training"
app:startDestination="@+id/trainingListFragment">
<fragment
android:id="@+id/trainingListFragment"
android:name="pl.apps.ui.training.list.TrainingListFragment"
android:label="TrainingListFragment">
<action
android:id="@+id/action_trainingListFragment_to_trainingDetailFragment"
app:destination="@id/trainingDetailFragment" />
</fragment>
<fragment
android:id="@+id/trainingDetailFragment"
android:name="pl.apps.ui.training.detail.TrainingDetailFragment"
android:label="TrainingDetailFragment" >
<argument
android:name="trainingId"
app:argType="string" />
</fragment>
</navigation>
是的,您的想法是正确的。每个活动都有自己的导航图和主机片段。
如何在片段和活动中导航(工具栏箭头(?
以标准方式 - 使用setupActionBarWithNavController
和Activitiy中的onSupportNavigateUp()
覆盖。不需要片段中的代码。
是否可以从第一个片段列表回到主?
是的,这是一种标准行为。如果Lista是第一个片段(顶级(,则按下后,您将切换到以前的活动。