Назначение NavController неизвестно с помощью BottomNavigation - PullRequest
0 голосов
/ 29 сентября 2019

Я использую BottomNavigation в классе главного меню для циклического перемещения по фрагментам на главном экране.Самое странное в этом то, что мое приложение падает, потому что NavController не находит пункт назначения в одном из четырех фрагментов.MainMenuFragment отличается от MainMenu (действие, содержащее фрагмент и NavHostFragment).Есть идеи, почему это происходит?

NavGraph: http://prntscr.com/pcfufk

Экран активности (MainMenu.java) http://prntscr.com/pcgcnv

В MainMenu.java:

private BottomNavigationView.OnNavigationItemSelectedListener listener = new BottomNavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
            Bundle args = new Bundle();
            switch (menuItem.getItemId()) {
                case R.id.addorder:
                    args.putString("UID", UID);
                    controller.navigate(R.id.action_mainMenuFragment_to_addOrderFragment, args);
                    break;
                case R.id.addcust:
                    bundle.putString("UID", UID);
                    controller.navigate(R.id.action_mainMenuFragment_to_addCustomerFragment);
                    break;
                case R.id.barcodeScan:
                    controller.navigate(R.id.action_mainMenuFragment_to_addProductFragment);
                    break;
                case R.id.home:
                    bundle.putString("UID", UID);
                    if (controller.getCurrentDestination() != null && controller.getCurrentDestination().getId() == R.id.mainMenuFragment) {
                        controller.navigate(R.id.mainMenuFragment, bundle);
                    }
                    break;
            }
            return true;
        }
    };

onСоздать в MainMenu.java:

bundle.putString("UID", UID);
        controller = Navigation.findNavController(this, R.id.fragment_container);
        controller.navigate(R.id.mainMenuFragment, bundle);

NavGraph 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/navigation_mainmenu"
    app:startDestination="@id/mainMenuFragment">

    <fragment
        android:id="@+id/addCustomerFragment"
        android:name="com.google.android.gms.samples.vision.barcodereader.fragments.customer.addCustomerFragment"
        android:label="addcustomerfragment"
        tools:layout="@layout/addcustomerfragment" />
    <fragment
        android:id="@+id/mainMenuFragment"
        android:name="com.google.android.gms.samples.vision.barcodereader.fragments.mainmenu.mainMenuFragment"
        android:label="mainmenufragment"
        tools:layout="@layout/mainmenufragment">
        <action
            android:id="@+id/action_mainMenuFragment_to_addProductFragment"
            app:destination="@id/addProductFragment"
            app:enterAnim="@anim/fui_slide_in_right"
            app:exitAnim="@anim/fui_slide_out_left"
            app:popExitAnim="@anim/fui_slide_out_left"
            app:popUpTo="@+id/mainMenuFragment" />
        <action
            android:id="@+id/action_mainMenuFragment_self"
            app:destination="@id/mainMenuFragment" />

        <action
            android:id="@+id/action_mainMenuFragment_to_addOrderFragment"
            app:destination="@id/addOrderFragment"
            app:enterAnim="@anim/fui_slide_in_right"
            app:exitAnim="@anim/fui_slide_out_left"
            app:popUpTo="@+id/mainMenuFragment" />
        <argument
            android:name="UID"
            app:argType="string"
            app:nullable="false" />
        <action
            android:id="@+id/action_mainMenuFragment_to_addCustomerFragment"
            app:destination="@id/addCustomerFragment"
            app:enterAnim="@anim/fui_slide_in_right"
            app:exitAnim="@anim/fui_slide_out_left"
            app:popUpTo="@+id/navigation_mainmenu" />
    </fragment>
    <fragment
        android:id="@+id/addProductFragment"
        android:name="com.google.android.gms.samples.vision.barcodereader.fragments.products.addProductFragment"
        android:label="addproductfragment"
        tools:layout="@layout/addproductfragment" />
    <fragment
        android:id="@+id/additionalInfoFragment"
        android:name="com.google.android.gms.samples.vision.barcodereader.fragments.orders.additionalInfoFragment"
        android:label="addinfofragment"
        tools:layout="@layout/addinfofragment">
        <argument
            android:name="UID"
            app:argType="string" />
    </fragment>
    <fragment
        android:id="@+id/addOrderFragment"
        android:name="com.google.android.gms.samples.vision.barcodereader.fragments.orders.addOrderFragment"
        android:label="choosecustomerfragment"
        tools:layout="@layout/choosecustomerfragment">
        <action
            android:id="@+id/action_addOrderFragment_to_additionalInfoFragment"
            app:destination="@id/additionalInfoFragment"
            app:enterAnim="@anim/fui_slide_in_right"
            app:exitAnim="@anim/fui_slide_out_left"
            app:popUpTo="@+id/mainMenuFragment" />
        <argument
            android:name="UID"
            app:argType="string" />
    </fragment>

1 Ответ

0 голосов
/ 29 сентября 2019

Использование BottomNavigationView с NavigationUI с использованием NavigationUI.setupWithNavigationController (controller) должно решить проблему.

Ссылки на источники:
https://medium.com/@vepetruskova/the-new-android-in-app-navigation-f7bfbe925b9 https://developer.android.com/guide/navigation/navigation-ui

...