Mvvm 导航主机片段重复id

Mvvm 导航主机片段重复id,mvvm,fragment,navigation-drawer,android-databinding,Mvvm,Fragment,Navigation Drawer,Android Databinding,我已经找到了解决办法。但我花了相当长的时间和大量的参考文献才偶然发现,所以我将把这个留在这里 这是一个与导航控制器相关的MVVM数据绑定抛出错误的应用程序 片段最初在我的活动中的数据绑定行上的NavHostFrament上出现重复id错误。删除android:id或android:name会导致生成错误或运行时错误 Activity.kt binding = DataBindingUtil.setContentView(this, R.layout.activity_home)

我已经找到了解决办法。但我花了相当长的时间和大量的参考文献才偶然发现,所以我将把这个留在这里

这是一个与导航控制器相关的MVVM数据绑定抛出错误的应用程序

片段最初在我的活动中的数据绑定行上的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"/> 


当片段行给我一个lint检查以转换为FragmentContainerView时,它开始抛出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" />


我遇到了同样的问题,然后我意识到我使用setContentView()方法和DataBindingUtil.setContentView()方法设置了activitiy的内容视图。我移除了其中一个,问题就解决了

我将代码替换为:

setContentView(R.layout.activity_main)
val binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
致:


你如何改变这些碎片?我没有得到任何错误,但也没有看到任何内容
val navHostFragment = supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment
val navController = navHostFragment.navController
setContentView(R.layout.activity_main)
val binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
val binding = DataBindingUtil.setContentView(this, R.layout.activity_main)