Я создал 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>