У меня есть BottomNavigationView с 4 элементами меню, три элемента перемещаются по разным фрагментам, что довольно просто. но четвертый MenuItem начнет новое действие.
Теперь я достиг этого, используя тег <activity>
вместо <fragment>
, например:
mobile_navigation. xml
<?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/mobile_nav"
app:startDestination="@+id/nav_fragment1">
<fragment
android:id="@+id/nav_fragment1"
android:name="com.test.testapp.FragmentOne"
android:label="@string/title_fragment1"
tools:layout="@layout/fragment1" />
<fragment
android:id="@+id/nav_fragment2"
android:name="com.test.testapp.FragmentTwo"
android:label="@string/title_fragment2"
tools:layout="@layout/fragment2" />
<fragment
android:id="@+id/nav_fragment3"
android:name="com.test.testapp.FragmentThree"
android:label="@string/title_fragment3"
tools:layout="@layout/fragment3" />
<activity
android:id="@+id/nav_activity1"
android:name="com.test.testapp.ActivityOne"
android:label="@string/title_activity1"
tools:layout="@layout/activity1" />
</navigation>
ActivityBase. java
BottomNavigationView navView = findViewById(R.id.nav_view);
AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder(
R.id.nav_fragment1, R.id.nav_fragment2, R.id.nav_fragment3, R.id.nav_activity1)
.build();
NavController navController = Navigation.findNavController(this, R.id.nav_host);
NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration);
NavigationUI.setupWithNavController(navView, navController);
, но когда я нажимаю кнопку "Назад", он выделяет элемент меню nav_activity1, сопоставленный с действием, и показывает фрагмент nav_fragment1 в контейнере.
Я хочу, чтобы он выделил последний посещенный фрагмент перед нажатием на элемент меню nav_activity1 и показал, что вместо этого, когда пользователь завершил работу с ActivityOne.
Я достиг этого до сих пор с помощью этого кода:
ActivityBase. java
navView.setOnNavigationItemSelectedListener((@NonNull MenuItem item) -> {
switch (item.getItemId()) {
case R.id.nav_fragment1: {
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.nav_host, new FragmentOne())
.commit();
return true;
}
case R.id.nav_fragment2: {
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.nav_host_fragment, new FragmentTwo())
.commit();
return true;
}
case R.id.nav_fragment3: {
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.nav_host_fragment, new FragmentThree())
.commit();
return true;
}
case R.id.nav_activity1: {
startActivity(new Intent(ActivityBase.this, ActivityOne.class));
return false;
}
}
return false;
});
Но я ищу более элегантный способ, если это возможно, используя навигационные компоненты