我尝试为我的PreferenceFragmentCompat应用程序开发nested设置时遇到android问题。我有Fragment称为设置Fragment,其中有以下方法:

@Override
    public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
        Log.d("KEY", rootKey + "KEY");
        setPreferencesFromResource(R.xml.pref_main, rootKey);
    }


但是,当我运行应用程序时,Logcat总是为空。这是我的pref_main.xml,其中嵌套了PreferencesScreen。

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:key="test">
    <PreferenceScreen
        android:key="button_voicemail_category_key"
        android:title="test"
        android:persistent="false">
        <EditTextPreference
            android:defaultValue="Default value"
            android:key="edit_text_preference_1"
            android:selectAllOnFocus="true"
            android:singleLine="true"
            android:title="Edit text preference" />
    </PreferenceScreen>

    <CheckBoxPreference
        android:defaultValue="true"
        android:key="check_box_preference_1"
        android:title="Check box preference" />
</PreferenceScreen>


您是否知道问题出在哪里,因为我尝试了许多不同的尝试,但是找不到解决问题的方法。

期待您的回复!

最佳答案

您可能误解了rootKey的含义。
阅读说明文件


  字符串:如果非空,则此首选项片段应使用此键植于PreferenceScreen


这意味着,如果您的PreferenceScreen是您的主要PreferenceScreen,则在您的情况下,具有键属性test的屏幕将rootKey设置为null。对于子屏幕(将以不同的方式打开),rootKey将设置为test,因为这些是PreferenceScreen的子屏幕,并带有键test

但是,您应该查看the current guide。它说:


  不再支持使用嵌套的<PreferenceScreen>在同一XML资源中声明嵌套的层次结构。您应该改用嵌套的Fragment对象。


另请参见:onCreatePreferencesOrganizing your settings

10-08 19:49