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 Studio 导航抽屉。工具栏隐藏在下一个片段活动或页面中