首页 > 解决方案 > AndroidX PreferenceFragmentCompat 找不到片段的 id id/内容的视图

问题描述

我提到了这个文件

设置活动.kt:

import androidx.appcompat.app.AppCompatActivity
import androidx.preference.PreferenceFragmentCompat

class SettingsActivity : AppCompatActivity() {
    class DispatcherFragment : PreferenceFragmentCompat() {
        override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
            this.setPreferencesFromResource(R.xml.settings_items, rootKey)
        }
    }


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

        this.supportFragmentManager
            .beginTransaction()
            .replace(R.id.content, DispatcherFragment())
            .commit()
    }
}

settings_items.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.preference.PreferenceScreen xmlns:app="http://schemas.android.com/apk/res-auto">
    <SwitchPreferenceCompat
            app:key="notifications"
            app:title="Enable message notifications"/>

    <Preference
            app:key="feedback"
            app:title="Send feedback"
            app:summary="Report technical issues or suggest new features"/>
</androidx.preference.PreferenceScreen>

当我运行程序时,我得到了一个错误:Caused by: java.lang.IllegalArgumentException: No view found for id 0x7f07004c (<my_package_name>:id/content) for fragment DispatcherFragment{24598125 (ae4eec60-a4c6-404b-b899-7fb0e6b378f2) id=0x7f07004c}

看来我做了和 Google Docs 一样的事情,但没有得到预期的结果。

这有什么遗漏吗?或者还有其他文件没有提到的注意事项?

标签: androidandroid-preferencesandroidx

解决方案


原因:java.lang.IllegalArgumentException:没有为片段 DispatcherFragment{24598125 (ae4eec60-a4c6-404b-b899-7fb0e6b378f2) id=0x7f07004c} 找到 id 0x7f07004c (:id/content) 的视图

这意味着 this.supportFragmentManager.replace(R.id.content, DispatcherFragment())无法找到用 定义的视图R.id.content。在您的情况下,
传入的 id必须是您的.supportFragmentManager.replace()R.id.contentsetContentView()Activity

就像是:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    //...
}

布局是:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <FrameLayout
        android:id="@+id/content"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</LinearLayout>

推荐阅读