Android Контроллер навигации устанавливает отмеченный элемент с помощью макета ящика навигации - PullRequest
1 голос
/ 30 мая 2020

Я создал Activity Drawer Activity, используя шаблон проекта Android Studio, программно добавил несколько пунктов меню и установил для выбранного элемента прослушиватель для перехода к целевому фрагменту.

Вот что я пытаюсь сделать: щелчок по каждому элементу меню, добавленному выше, должен открывать тот же целевой фрагмент скажем HomeFragment , но с другими аргументами, чтобы я мог повторно использовать макет .

Пока он отлично работает, только с одной проблемой: пункты меню не выделяются правильно, а пункт «Домой» всегда проверяется. Я думаю, это потому, что я добавил ссылку на себя в домашний фрагмент. Есть ли способ исправить это?

MainActivity. java

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Toolbar toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    DrawerLayout drawer = findViewById(R.id.drawer_layout);
    NavigationView navigationView = findViewById(R.id.nav_view);

    navController = Navigation.findNavController(this, R.id.nav_host_fragment);

    // Adding menu items
    Menu menu = navigationView.getMenu();
    SubMenu labels = menu.addSubMenu("Labels");
    labels.add(R.id.group_labels, 201, 201, "Label 1").setIcon(R.drawable.ic_menu_gallery);
    labels.add(R.id.group_labels, 202, 202, "Label 2").setIcon(R.drawable.ic_menu_gallery);    

    navigationView.invalidate();

    appBarConfig = new AppBarConfiguration.Builder(R.id.home)
            .setDrawerLayout(drawer)
            .build();

    NavigationUI.setupActionBarWithNavController(this, navController, appBarConfig);
    NavigationUI.setupWithNavController(navigationView, navController);

    // Navigation item click listener
    navigationView.setNavigationItemSelectedListener(item -> {
        if (item.getGroupId() == R.id.group_labels) {
            HomeFragmentDirections.ActionHomeSelf action = HomeFragmentDirections.actionHomeSelf();
            action.setLabel(item.getTitle().toString());

            navController.navigate(action);
        }

        navigationView.setCheckedItem(item.getItemId()); // Not working

        NavigationUI.onNavDestinationSelected(item, navController);

        drawer.closeDrawer(GravityCompat.START);

        return true;
    });
}

mobile_navigation. xml

<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/mobile_navigation"
app:startDestination="@+id/home">

<fragment
    android:id="@+id/home"
    android:label="@string/menu_home"
    android:name=".fragments.HomeFragment"
    tools:layout="@layout/fragment_home">

    <argument
        android:name="label"
        app:argType="string"
        android:defaultValue="default label" />

    <action
        android:id="@+id/action_home_self"
        app:destination="@id/home"
        app:launchSingleTop="false">
    </action>
    <action
        android:id="@+id/action_home_to_blank"
        app:destination="@id/blankFragment" />
</fragment>
<fragment
    android:id="@+id/blankFragment"
    android:name=".BlankFragment"
    android:label="fragment_blank"
    tools:layout="@layout/fragment_blank" />

</navigation>

activity_main_drawer. xml

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:showIn="navigation_view">

<group android:checkableBehavior="single">
    <item
        android:id="@+id/home"
        android:icon="@drawable/ic_menu_camera"
        android:orderInCategory="0"
        android:title="@string/menu_home" />

    <item
        android:id="@+id/blankFragment"
        android:icon="@drawable/ic_menu_camera"
        android:orderInCategory="0"
        android:title="@string/hello_blank_fragment" />
</group>

<item
    android:orderInCategory="200"
    android:title="@string/drawer_menu_group_labels">
    <menu>
        <group
            android:id="@+id/group_labels"
            android:checkableBehavior="single" />
    </menu>
</item>

<item
    android:orderInCategory="300"
    android:title="@string/drawer_menu_group_pages">
    <menu>
        <group
            android:id="@+id/group_pages"
            android:checkableBehavior="single" />
    </menu>
</item>
</menu>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...