android - 错误 : No view found for id androidx(Jetpack) Preference library

标签 android android-preferences android-jetpack

我按照指示 on docs使用 Android Jetpack 首选项库,但我收到以下错误

java.lang.RuntimeException: Unable to start activity ComponentInfo{ ... activity.SettingsActivity}: java.lang.IllegalArgumentException: No view found for id 0x7f090111 (... :id/settings_container) for fragment SettingsFragment
...
Caused by: java.lang.IllegalArgumentException: No view found for id 0x7f090111 (... :id/settings_container) for fragment SettingsFragment 

因为我认为这通常发生在没有容器安装 fragment 的情况下,但在我的情况下有一个容器(settings_container)。

我的代码如下所示

设置 Activity
class SettingsActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        supportFragmentManager
            .beginTransaction()
            .replace(R.id.settings_container, SettingsFragment())
            .commit()
    }
}

SettingsFragment
class SettingsFragment : PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {

    setPreferencesFromResource(R.xml.pref_main, rootKey)
}

Activity 设置.xml
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:id="@+id/settings_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".activities.SettingsActivity">
</FrameLayout>

pref_main.xml (缩短)
<?xml version="1.0" encoding="utf-8"?>
<androidx.preference.PreferenceScreen
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:android="http://schemas.android.com/apk/res/android">

 <PreferenceCategory
            app:key="data_sync_category"
            app:title="@string/pref_data_sync_category">

        <SwitchPreferenceCompat app:key="data_sync_status"
                                app:title="@string/pref_data_sync_status_title"
                                app:summary="@string/pref_data_sync_status_summary"
                                android:defaultValue="true"
        />
        <ListPreference app:key="what_data_sync"
                        app:title="@string/pref_sync_frequency_title"
                        app:summary="@string/pref_sync_frequency_summary"
                        android:entries="@array/pref_sync_frequency_titles"
                        android:entryValues="@array/pref_sync_frequency_values"
                        android:defaultValue="30"
                        android:negativeButtonText="@null"
                        android:positiveButtonText="@null"
        />
    </PreferenceCategory>
</androidx.preference.PreferenceScreen>

如您所见,代码几乎与文档中的代码相同。
我尝试无效并重新启动,没有工作。

请帮忙

最佳答案

不,没有容器。

你从不使用 setContentView()在您的 Activity 中,因此该布局不存在。 tools:context是一个仅限 IDE 的功能。

你需要使用

setContentView(R.layout.activity_settings)

调用 super.onCreate(savedInstanceState) 后立即.

关于android - 错误 : No view found for id androidx(Jetpack) Preference library,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54366752/

相关文章:

android - 如何使用导航组件在单个 fragment 上正确添加选项菜单而不破坏 "up behavior"

java - 在Android中为Imageview设置唯一的标签ID

Android 设备 API 级别与版本不匹配

java - 使用 android studio 将数据导出到 google 工作表 : How to transfer variables between activities?

android - android.support.v7.preference.Preference 找不到 onCreateView() 方法

android - Jetpack 分页库无需滚动即可加载所有页面

Android Jetpack Navigation - 如何从抽屉菜单项导航到嵌套导航图

android - 加载 ListView 时的性能问题

java - 如何识别偏好 Activity 中的偏好

android - 在 Preference.onSaveInstanceState 中保存什么