导航主机片段重复 ID
Nav Host Fragment Duplicate id
我已经找到了解决办法。但是花了很长时间,偶然发现了很多参考资料,所以我会把它留在这里。
此应用存在与 Nav Controller 相关的 MVVM 数据绑定抛出错误。
片段最初在我的 activity 中的数据绑定行上的 NavHostFrament 上给出了 重复 ID 错误。删除 android:id 或 android:name 导致构建错误或运行时错误。
Activity.kt
binding = DataBindingUtil.setContentView(this, R.layout.activity_home)
.
.
.
val navController = findNavController(R.id.nav_host_fragment)
Layout.xml
<fragment
android:id="@+id/nav_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="true"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:navGraph="@navigation/mobile_navigation"/>
虽然片段行给了我一个转换为 FragmentContainerView 的 lint 检查,但它开始抛出 NavController not set 错误。
我将片段标签转移到一个单独的 xml 文件中。虽然我认为这不是必需的。
nav_header.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.fragment.app.FragmentContainerView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/nav_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="true"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:navGraph="@navigation/mobile_navigation" />
至于Activity文件。
按照这个 link... https://issuetracker.google.com/issues/142847973#comment4
已替换
val navController = findNavController(R.id.nav_host_fragment)
和
val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment
val navController = navHostFragment.navController
我遇到了同样的问题,然后我意识到我使用 setContentView() 方法和 DataBindingUtil.setContentView() 方法设置了活动的内容视图。我删除了其中一个,问题就解决了。
我替换了我的代码:
setContentView(R.layout.activity_main)
val binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
至:
val binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
我已经找到了解决办法。但是花了很长时间,偶然发现了很多参考资料,所以我会把它留在这里。
此应用存在与 Nav Controller 相关的 MVVM 数据绑定抛出错误。
片段最初在我的 activity 中的数据绑定行上的 NavHostFrament 上给出了 重复 ID 错误。删除 android:id 或 android:name 导致构建错误或运行时错误。
Activity.kt
binding = DataBindingUtil.setContentView(this, R.layout.activity_home)
.
.
.
val navController = findNavController(R.id.nav_host_fragment)
Layout.xml
<fragment
android:id="@+id/nav_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="true"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:navGraph="@navigation/mobile_navigation"/>
虽然片段行给了我一个转换为 FragmentContainerView 的 lint 检查,但它开始抛出 NavController not set 错误。
我将片段标签转移到一个单独的 xml 文件中。虽然我认为这不是必需的。
nav_header.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.fragment.app.FragmentContainerView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/nav_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:defaultNavHost="true"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:navGraph="@navigation/mobile_navigation" />
至于Activity文件。 按照这个 link... https://issuetracker.google.com/issues/142847973#comment4
已替换
val navController = findNavController(R.id.nav_host_fragment)
和
val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment
val navController = navHostFragment.navController
我遇到了同样的问题,然后我意识到我使用 setContentView() 方法和 DataBindingUtil.setContentView() 方法设置了活动的内容视图。我删除了其中一个,问题就解决了。
我替换了我的代码:
setContentView(R.layout.activity_main)
val binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
至:
val binding = DataBindingUtil.setContentView(this, R.layout.activity_main)