美文网首页
BUG记录:Duplicate id 0x7f07005b, t

BUG记录:Duplicate id 0x7f07005b, t

作者: 光羽隼 | 来源:发表于2020-03-29 22:37 被阅读0次

    这两天在跟着某位大佬的项目研究的时候,出现了一个BUG。和大佬的代码对照了好久,又从网上查了好久才发现错误的原因。

    原因是:重复加载布局

    错误log如下👇:

    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.gystry.kweather/com.gystry.kweather.ui.weather.WeatherActivity}: android.view.InflateException: Binary XML file line #85: Binary XML file line #85: Error inflating class fragment
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2946)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3081)
            at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
            at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
            at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1831)
            at android.os.Handler.dispatchMessage(Handler.java:106)
            at android.os.Looper.loop(Looper.java:201)
            at android.app.ActivityThread.main(ActivityThread.java:6806)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)
         Caused by: android.view.InflateException: Binary XML file line #85: Binary XML file line #85: Error inflating class fragment
         Caused by: android.view.InflateException: Binary XML file line #85: Error inflating class fragment
         Caused by: java.lang.IllegalArgumentException: Binary XML file line #85: Duplicate id 0x7f07005b, tag null, or parent id 0x7f070075 with another fragment for com.gystry.kweather.ui.area.ChooseFragment
            at androidx.fragment.app.FragmentManagerImpl.onCreateView(FragmentManagerImpl.java:3212)
            at androidx.fragment.app.FragmentController.onCreateView(FragmentController.java:134)
            at androidx.fragment.app.FragmentActivity.dispatchFragmentsOnCreateView(FragmentActivity.java:357)
            at androidx.fragment.app.FragmentActivity.onCreateView(FragmentActivity.java:336)
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:784)
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:734)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:867)
            at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:828)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:870)
            at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:828)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:519)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:427)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
            at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:697)
            at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:170)
            at androidx.databinding.DataBindingUtil.setContentView(DataBindingUtil.java:303)
            at androidx.databinding.DataBindingUtil.setContentView(DataBindingUtil.java:284)
            at com.gystry.kweather.ui.weather.WeatherActivity$binding$2.invoke(WeatherActivity.kt:25)
            at com.gystry.kweather.ui.weather.WeatherActivity$binding$2.invoke(WeatherActivity.kt:17)
            at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
            at com.gystry.kweather.ui.weather.WeatherActivity.getBinding(Unknown Source:7)
            at com.gystry.kweather.ui.weather.WeatherActivity.onCreate(WeatherActivity.kt:39)
            at android.app.Activity.performCreate(Activity.java:7224)
            at android.app.Activity.performCreate(Activity.java:7213)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1272)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2926)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3081)
            at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
            at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
            at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
    2020-03-29 22:17:53.753 15400-15400/com.gystry.kweather E/AndroidRuntime:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1831)
            at android.os.Handler.dispatchMessage(Handler.java:106)
            at android.os.Looper.loop(Looper.java:201)
            at android.app.ActivityThread.main(ActivityThread.java:6806)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)
    

    对应的代码👇:

       val viewModel by lazy {
            ViewModelProviders.of(this, InjectorUtil.getWeatherModelFactory())
                .get(WeatherViewModel::class.java)
        }
        private val binding by lazy {
            DataBindingUtil.setContentView<ActivityWeatherBinding>(
                this,
                R.layout.activity_weather
            )
        }
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_weather)
            if (Build.VERSION.SDK_INT >= 21) {
                val decorView = window.decorView
                decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN or View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                window.statusBarColor = Color.TRANSPARENT
            }
            binding.viewModel = viewModel
        }
    

    原因就是上边在oncreate()方法中多写了一行代码setContentView(R.layout.activity_weather)
    上边的val binding by lazy ...是延迟加载对象,这里边已经进行了布局的加载。

    相关文章

      网友评论

          本文标题:BUG记录:Duplicate id 0x7f07005b, t

          本文链接:https://www.haomeiwen.com/subject/sxupuhtx.html