【问题标题】:Duplicate id, tag null, with another fragment for androidx.navigation.fragment.NavHostFragment重复的 id,标签为空,带有 androidx.navigation.fragment.NavHostFragment 的另一个片段
【发布时间】:2020-04-20 17:31:32
【问题描述】:

问题 我正在尝试在活动中添加一个片段以及导航。但我看到以下错误

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.app.myapp/com.app.myapp.HomeMainActivity}: android.view.InflateException: Binary XML file line #12: Binary XML file line #12: Error inflating class fragment
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2927)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2988)
    at android.app.ActivityThread.-wrap14(ActivityThread.java)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1631)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:154)
    at android.app.ActivityThread.main(ActivityThread.java:6682)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410)
 Caused by: android.view.InflateException: Binary XML file line #12: Binary XML file line #12: Error inflating class fragment
 Caused by: android.view.InflateException: Binary XML file line #12: Error inflating class fragment
 Caused by: java.lang.IllegalArgumentException: Binary XML file line #12: Duplicate id 0x7f0900ed, tag null, or parent id 0xffffffff with another fragment for androidx.navigation.fragment.NavHostFragment

代码

  1. activity_home_new.xml

        <?xml version="1.0" encoding="utf-8"?>
       <layout 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">
          <androidx.constraintlayout.widget.ConstraintLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:background="@color/colorPrimaryDark"
            tools:context=".HomeMainActivity">
    
            <fragment
            android:id="@+id/my_nav_host_fragment"
            android:name="androidx.navigation.fragment.NavHostFragment"
            android:layout_width="0dp"
            android:layout_height="0dp"
            app:defaultNavHost="true"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:navGraph="@navigation/nav_graph" />
           </androidx.constraintlayout.widget.ConstraintLayout>
    
           </layout>
    

在 Fragment 和 Activity 类中没有进行任何更改。

我尝试过的解决方案

我尝试在 ctivity_home_new.xml 中将片段更改为 framelayout 和 FragmentContainerView 应用程序没有;碰撞。

我对崩溃的看法

崩溃与“androidx.navigation.fragment.NavHostFragment”有关。 与 MapFragment 相关的类似问题很少。

不找代码,只想知道崩溃的根本原因

【问题讨论】:

  • 你找到解决办法了吗?
  • @FlorescuCătălin 我想我找到了。

标签: android android-fragments android-xml androidx android-jetpack


【解决方案1】:

看来NavHostFragment只是一个巧合的passwalker。此问题与两次膨胀 XML 内容有关。

就我而言,我在做什么:

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        binding = ActivitySigninBinding.inflate(layoutInflater)
        setContentView(R.layout.activity_signin)
}

它一直有效,直到我将我的内容分成更多片段。解决方法是:

 override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        binding = ActivitySigninBinding.inflate(layoutInflater)
        setContentView(binding.root) // Notice the binding root
}

希望对你有帮助,花点时间弄清楚。

【讨论】:

  • 好吧,昨天我也设法修复了它。我在做同样的过程,设置了两次布局。
  • 兄弟。愿更高的力量祝福你。我花了大约 2 个小时试图找出错误。设法注释掉 // setContentView(R.layout.activity_main) 并保留第二个 setContentView() fun() 并且它现在正在工作。
  • 在对现有活动启用绑定时很容易忽略这一点。错误信息不够清楚,但这确实是原因和解决方案。
【解决方案2】:

如果你的绑定对象是 lateinit :

        if (!this::binding.isInitialized) {
            binding = FragmentMainBinding.inflate(context.inflater())
        }

否则,如果您使用可为空的绑定对象,请使用此代码:

        if (binding == null) {
            binding = FragmentMainBinding.inflate(context.inflater())
        }

希望对您有所帮助,花点时间弄清楚。
重新充气会产生这个问题!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多