Я пытаюсь сделать кнопку выхода из системы в разделе навигации в разделе «Активность в окне навигации». В этом случае мне не нужно открывать фрагмент. Когда нажата кнопка, должна появиться страница входа. Но когда я нажимаю кнопку, это ничего не делает. Нужен ли фрагмент? как начать деятельность во фрагменте?
если фрагмент является обязательным, есть ли в любом случае приложение, возвращающееся к основному фрагменту, когда я нажимаю кнопку "назад" на телефоне? MainFragment (первый фрагмент -> фрагмент выхода из системы -> активность входа, и когда я нажимаю кнопку «назад», я могу сделать так, чтобы он переходил к первому фрагменту, а не выходить из системы (второй) фрагмент.
Так вот, как я кодировал, но не работает.
В папке меню activity_drawer
<?xml version="1.0" encoding="utf-8"?>
<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/nav_menu"
android:icon="@drawable/ic_restaurant_black_24dp"
android:title="@string/menu_Menu" />
<item
android:id="@+id/nav_cart"
android:icon="@drawable/ic_shopping_cart_black_24dp"
android:title="@string/menu_cart" />
<item
android:id="@+id/nav_orders"
android:icon="@drawable/ic_assignment_turned_in_black_24dp"
android:title="@string/menu_orders" />
<item
android:id="@+id/nav_logout"
android:icon="@drawable/ic_exit_to_app_black_24dp"
android:title="@string/menu_Logout" />
</group>
</menu>
Поскольку мне не нужно использовать фрагмент, я не определил его в 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_navigation"
app:startDestination="@+id/nav_menu">
<fragment
android:id="@+id/nav_menu"
android:name="com.dav2020.orderforme.ui.menu.MenuFragment"
android:label="@string/menu_Menu"
tools:layout="@layout/fragment_memu">
</fragment>
<fragment
android:id="@+id/nav_cart"
android:name="com.dav2020.orderforme.ui.cart.CartFragment"
android:label="@string/menu_cart"
tools:layout="@layout/fragment_cart" />
<fragment
android:id="@+id/nav_orders"
android:name="com.dav2020.orderforme.ui.orders.OrdersFragment"
android:label="@string/menu_orders"
tools:layout="@layout/fragment_orders" />
</navigation>
А это код
DrawerLayout drawer = findViewById(R.id.drawer_layout);
final NavigationView navigationView = findViewById(R.id.nav_view);
// Passing each menu ID as a set of Ids because each
// menu should be considered as top level destinations.
mAppBarConfiguration = new AppBarConfiguration.Builder(
R.id.nav_menu, R.id.nav_cart, R.id.nav_orders, R.id.nav_logout)
.setDrawerLayout(drawer)
.build();
NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
NavigationUI.setupWithNavController(navigationView, navController);
navController.addOnDestinationChangedListener(new NavController.OnDestinationChangedListener() {
@Override
public void onDestinationChanged(@NonNull NavController controller, @NonNull NavDestination destination, @Nullable Bundle arguments) {
int menuId = destination.getId();
switch (menuId){
case R.id.nav_menu:
fab.show();
break;
case R.id.nav_cart:
//Intent cartIntent = new Intent (Home.this, Cart.class);
//startActivity(cartIntent);
fab.hide();
break;
case R.id.nav_orders:
//Intent orderIntent = new Intent (Home.this, OrderStatus.class);
//startActivity(orderIntent);
fab.hide();
break;
case R.id.nav_logout:
Intent signIn = new Intent(Home.this, SignInActivity.class);
signIn.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(signIn);
fab.hide();
break;
default:
fab.show();
}
}
});