我尝试为我的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
对象。
另请参见:onCreatePreferences和Organizing your settings