导航组件有问题。我想知道我的想法是否正确。
我有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>
答案 0 :(得分:0)
是的,您的想法是正确的。每个活动都有自己的导航图和主机片段。
如何实现片段和活动中的向上导航(工具栏箭头)?
以标准方式-使用setupActionBarWithNavController
并在Activitiy中覆盖onSupportNavigateUp()
。无需分段代码。
是否可以从第一个片段列表A返回到主要片段?
是的,这是标准行为。如果listA是第一个片段(顶层),则在按回后,您将切换到上一个活动。