Android - 使用活动和片段导航 - 二进制 XML 文件错误

Posted

技术标签:

【中文标题】Android - 使用活动和片段导航 - 二进制 XML 文件错误【英文标题】:Android - Use of navigation with activities and fragments - Binary XML file Error 【发布时间】:2021-12-14 01:48:53 【问题描述】:

按照 Google 的建议,我有一个由一个 Activity 和多个片段组成的应用程序。

- MainActivity
  - LobbyFragment
  - GameFragment
  - ...

我也想用导航地图

我在Activity中放了一个菜单到处都有,然后我想切换页面的内容。

为此,如fragment tutorial 所示,我制作了activitymain.xml,以便稍后在片段之间切换FragmentContainerView 的内容。

<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout 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:layout_
    android:layout_
    tools:context=".MainActivity">

    <com.google.android.material.appbar.AppBarLayout
        android:layout_
        android:layout_
        android:background="@android:color/transparent"
        android:theme="@style/Theme.application.AppBarOverlay">
    </com.google.android.material.appbar.AppBarLayout>

    <androidx.fragment.app.FragmentContainerView
        android:id="@+id/fragment_container_view"
        android:layout_
        android:layout_
        android:name="com.my.application.LobbyFragment" /> <!--Here is failure-->

</androidx.coordinatorlayout.widget.CoordinatorLayout>

但是,此时,当我编译时,我有: Unable to start activity ComponentInfocom.my.application/com.my.application.MainActivity: android.view.InflateException: Binary XML file line #21: Binary XML file line #21: Error inflating class androidx.fragment.app.FragmentContainerView

以及将 Activity 放在导航地图的什么位置?

【问题讨论】:

【参考方案1】:

你引用的documentation link使用的是传统的分片事务,直接访问supportFragmentManager;但从您的帖子中发现,您使用的是Navigation Architecture components。

在导航组件中,您不应该在android:name 属性中使用特定的片段类,而是navController 使用NavHostFragment 来处理这一点

要解决这个问题,请更换

android:name="com.my.application.LobbyFragment" 

android:name="androidx.navigation.fragment.NavHostFragment"

另外,您需要使用app:navGraph 属性引用navGraph 的名称;假设它被命名为nav_graph:

app:navGraph="@navigation/nav_graph"

【讨论】:

非常感谢!即使只有好的 android:name 似乎也能正常工作。 app:navGraph="@navigation/nav_graph" 是做什么的? 如果我理解得很好,这个特定的导航图用于这个特定的 FragmentContainerView。所以把activity放在里面没有用吗? @Foxhunt 没错,它不会被activity引用,除非你需要通过编程方式修改图中的一些片段;这发生在奇怪和高级的情况下。 在您的应用程序中,您可以有另一个 FragmentContainerView 引用另一个 navGraph,因此特定的 FragmentContainerView 绑定到单个 navGraph

以上是关于Android - 使用活动和片段导航 - 二进制 XML 文件错误的主要内容,如果未能解决你的问题,请参考以下文章

从活动向上导航到片段打开相同的片段 - Android 导航组件

导航抽屉和Android中的活动

带有片段的 Android Studio 导航抽屉。工具栏隐藏在下一个片段活动或页面中

Android底部导航片段问题

如何使用底部导航视图和 Android 导航组件将参数传递给片段?

Android:当用户在导航组件、单活动应用程序中回击片段 B 时更新片段 A