Как использовать кнопку навигации без использования фрагмента в Android Активность в Навигаторе - PullRequest
0 голосов
/ 06 апреля 2020

Я пытаюсь сделать кнопку выхода из системы в разделе навигации в разделе «Активность в окне навигации». В этом случае мне не нужно открывать фрагмент. Когда нажата кнопка, должна появиться страница входа. Но когда я нажимаю кнопку, это ничего не делает. Нужен ли фрагмент? как начать деятельность во фрагменте?

если фрагмент является обязательным, есть ли в любом случае приложение, возвращающееся к основному фрагменту, когда я нажимаю кнопку "назад" на телефоне? 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();
                }
            }
        });
...