许多导航组件还可以吗?

时间:2019-04-30 12:26:10

标签: android navigation

导航组件有问题。我想知道我的想法是否正确。

我有main_activityA_activityB_activityMainAB的父项。

每个活动(AB)应具有自己的NavHostFragmentAB有很多片段,如列表,详细信息等)

示例流程:main-> A-> listA-> detailA

后退按钮可以正常工作。

问题:

如何实现片段和A活动中的向上导航(工具栏箭头)?

是否可以从第一个片段listA回到主目录?

是否使用许多导航组件是正确的解决方案(每项AB ...活动)?

在我的第一个片段中,我没有向上导航的选项。如何启用呢?

活动代码:

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>

1 个答案:

答案 0 :(得分:0)

是的,您的想法是正确的。每个活动都有自己的导航图和主机片段。

  

如何实现片段和活动中的向上导航(工具栏箭头)?

以标准方式-使用setupActionBarWithNavController并在Activitiy中覆盖onSupportNavigateUp()。无需分段代码。

  

是否可以从第一个片段列表A返回到主要片段?

是的,这是标准行为。如果listA是第一个片段(顶层),则在按回后,您将切换到上一个活动。