Проблема:
Я новичок в Android, и я думаю, что концептуально я просто что-то неправильно понимаю. Я не могу иметь два navHostFragments в одной и той же деятельности. Я получаю эту ошибку.
Ошибка надувания фрагмента класса
График bottomNavigationView сам по себе работает очень хорошо, и я могу без проблем переключать вкладки, проблема возникает при попытке добавить новую навигацию по клику FAB. Я не хочу заменять контейнер фрагментов новым, я хочу запустить новый фрагмент, который будет полноэкранным
Контекст:
- В основном задании у меня есть складная панель инструментов, bottomNavigationView и кнопка FAB . Я также хочу иметь два NavHostFragment, по одному для каждого графика навигации.
- Первый график навигации обрабатывает переключение между вкладками bottomNavigationView (содержимое фрагментов отображается под сворачиваемой панелью инструментов и сверху ofNavigationView)
- Второй график навигации появится при нажатии FAB и будет полноэкранным
Что у меня есть:
Это Вот как Activity_main. xml выглядит как
<com.google.android.material.appbar.AppBarLayout
.....
/>
<fragment
android:id="@+id/waiterNavigationHostFragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="false"
app:navGraph="@navigation/waiter_navigation" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/appBarLayout"
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<fragment
android:id="@+id/bottomNavigationHostFragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="true"
app:navGraph="@navigation/bottom_navigation" />
</FrameLayout>
<FrameLayout>
<com.google.android.material.floatingactionbutton.FloatingActionButton
.........
/>
<com.google.android.material.bottomnavigation.BottomNavigationView
........
/>
</FrameLayout>
Это waiter_navigation. xml, который должен отображаться в полноэкранном режиме при нажатии FAB:
<?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/waiter_screen">
<fragment
android:id="@+id/waiter_screen"
android:name=".app.ui.waiter.WaiterScreenFragment"
android:label="fragment_waiter"
tools:layout="@layout/fragment_waiter" >
<action
android:id="@+id/navigate_to_menu_screen"
app:destination="@id/menuScreenFragment" />
</fragment>
<fragment
android:id="@+id/menu_screen"
android:name=".app.ui.menu.MenuScreenFragment"
android:label="MenuScreenFragment"
tools:layout="@layout/fragment_menu" />
</navigation>
Это bottom_navigation. xml это происходит между свернутой панелью приложения и bottomNavigationView:
<?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/bottom_navigation"
app:startDestination="@id/home_screen">
<fragment
android:id="@+id/home_screen"
android:name=".app.ui.home.HomeScreenFragment"
android:label="fragment_home"
tools:layout="@layout/fragment_home" >
<action
android:id="@+id/navigate_to_receipt_screen"
app:destination="@id/receipt_screen"
app:enterAnim="@anim/slide_in_right"
app:exitAnim="@anim/slide_out_left"/>
</fragment>
<fragment
android:id="@+id/receipt_screen"
android:name=".app.ui.receipt.ReceiptScreenFragment"
android:label="fragment_explore"
tools:layout="@layout/fragment_receipt" >
<action
android:id="@+id/navigate_to_profile_screen"
app:destination="@id/profile_screen"
app:enterAnim="@anim/slide_in_right"
app:exitAnim="@anim/slide_out_left"/>
</fragment>
<fragment
android:id="@+id/profile_screen"
android:name=".app.ui.profile.ProfileScreenFragment"
android:label="fragment_more"
tools:layout="@layout/fragment_profile" />
</navigation>
Полная информация об ошибке
2020-02-24 11: 54: 30.401 16857-16857 / com.restaurant. app E / AndroidRuntime: ИСКЛЮЧИТЕЛЬНОЕ ИСКЛЮЧЕНИЕ: основной Процесс: com.restaurant.app, PID: 16857 java .lang.RuntimeException: Невозможно запустить действие ComponentInfo {com.restaurant.app/com.restaurant.app.ui.ma in.MainScreenActivity}: android .view.InflateException: двоичная XML строка файла # 45: двоичная XML строка файла # 45: ошибка надувания фрагмента класса в android .app.ActivityThread.performLaunchActivity (ActivityThread. java: 2946) в android .app.ActivityThread.handleLaunchActivity (ActivityThread. java: 3081) в android .app.servertransaction.LaunchActivityItem.execute (LaunchActivityItem. java: 78) в android .app .servertransaction.TransactionExecutor.executeCallbacks (TransactionExecutor. java: 108) в android .app.servertransaction.TransactionExecutor.execute (TransactionExecutor. java: 68) в android .app.ActivityThread $ H.handleMessage (ActivityThread . java: 1831) в android .os.Handler.dispatchMessage (Обработчик. java: 106) в android .os.Looper.l oop (Looper. java: 201) в android .app.ActivityThread.main (ActivityThread. java: 6806) в java .lang.reflect.Method.invoke (собственный метод) в com. android .internal.os.RuntimeInit $ MethodAndArgsCaller.run ( RuntimeInit. java: 547) в com. android .internal.os.ZygoteInit.main ( ZygoteInit. java: 873) Вызывается: android .view.InflateException: двоичный файл XML строка файла # 45: двоичный файл XML строка файла № 45: ошибка раздувания фрагмента класса. Вызывается: android .view. InflateException: двоичная XML строка файла # 45: ошибка надувания фрагмента класса, вызванная: java .lang.IllegalStateException: не определено начальное назначение с помощью приложения: startDestination для com.flypay.restaurant.app:id/waiter_screen at androidx.navigation .NavGraphNavigator.navigate (NavGraphNavigator. java: 61) в androidx.navigation.NavGraphNavigator.navigate (NavGraphNavigator. java: 28) в androidx.navigation.NavController.navigate (NavController 9). 10). navigation.NavController.onGraphCreated (NavController. java: 577) в androidx.navigation.NavController.setGraph (NavController. java: 534) в androidx.navigation.NavController.setGraph (NavController. java 499): 4 .navigation.NavController.setGraph (NavController. java: 481) на androidx.navigation.fragment.NavHostFragment.onCreate (NavHostFragment. * 1 090 *: 237) на андроиде. фрагмент.app.Fragment.performCreate (Fragment. java: 2684) в androidx.fragment.app.FragmentStateManager.create (FragmentStateManager. java: 280) в androidx.fragment.app.FragmentManager.moveToState (FragmentManager. java: 1175) в androidx.fragment.app.FragmentManager.moveToState (FragmentManager. java: 1356) в androidx.fragment.app.FragmentLayoutInflaterFactory.onCreateView (FragmentLayoutInflaterFactory. java: 109) в androidlerFragment. .onCreateView (FragmentController. java: 135) в androidx.fragment.app.FragmentActivity.dispatchFragmentsOnCreateView (FragmentActivity. java: 356) в androidx.fragment.app.FragmentActivity.onCreateView (FragmentActivity. java): 335 android .view.LayoutInflater.createViewFromTag (LayoutInflater. java: 784) в android .view.LayoutInflater.createViewFromTag (LayoutInflater. java: 734) в android .view.LayoutInflater.rInfter. java: 867) в android .view.LayoutInflater.rInflateChildren (LayoutInflater. java: 828) в android .view.Layo utInflater.inflate (LayoutInflater. java: 519) в android .view.LayoutInflater.inflate (LayoutInflater. java: 427) в android .view.LayoutInflater.inflate (LayoutInflater. java: 374) в androidx.appcompat.app.AppCompatDelegateImpl.setContentView (AppCompatDelegateImpl. java: 469) в androidx.appcompat.app.AppCompatActivity.setContentView (AppCompatActivity. java: 140) в com.flypay.res.ta. .MainScreenActivity.onCreate (MainScreenActivity.kt: 17) в android .app.Activity.performCreate (Activity. java: 7224) в android .app.Activity.performCreate (Activity. java: 7213) в android .app.Instrumentation.callActivityOnCreate (Instrumentation. java: 1272) в android .app.ActivityThread.performLaunchActivity (ActivityThread. java: 2926) в android .app.ActivityThread.handleLaunchActivity (ActivityThread. java: 3081) 2020-02-24 11: 54: 30.402 16857-16857 / com.restaurant.app E / AndroidRuntime: at android .app.servertransaction.LaunchActivityItem.execute (LaunchActivityItem. java: 78) в android .app.servertransactio n.TransactionExecutor.executeCallbacks (TransactionExecutor. java: 108) в android .app.servertransaction.TransactionExecutor.execute (TransactionExecutor. java: 68) в android .app.ActivityThread $ H.handleMessage (ActivityThread. java: 1831) в android .os.Handler.dispatchMessage (Обработчик. java: 106) в android .os.Looper.l oop (Looper. java: 201) в android .app.ActivityThread.main (ActivityThread. java: 6806) в java .lang.reflect.Method.invoke (собственный метод) в com. android .internal.os.RuntimeInit $ MethodAndArgsCaller.run (RuntimeInit . java: 547) по тел. android .internal.os.ZygoteInit.main (ZygoteInit. java: 873)