PreferenceFragmentCompant, показывающий ноль в onCreatePreferences на rootKey - PullRequest
0 голосов
/ 10 сентября 2018

У меня проблема с 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>

У вас есть идея, в чем проблема, потому что я пробовал много разных вещей, но не смог найти решение этой проблемы.

Я с нетерпением жду вашего ответа!

1 Ответ

0 голосов
/ 28 декабря 2018

Вы, вероятно, неправильно поняли значение rootKey. Читая документацию, там написано

String : Если значение не нулевое, этот фрагмент предпочтения должен быть укоренен в PreferenceScreen с этим ключом.

Это означает, что если ваш PreferenceScreen является вашим основным PreferenceScreen, в вашем случае экран с ключевым атрибутом test, rootKey устанавливается на null. Для дочерних экранов, которые будут открываться по-другому, rootKey будет установлен на test, поскольку это дочерние элементы PreferenceScreen с ключом test.

Тем не менее, вы должны взглянуть на текущее руководство . Там написано:

Объявление вложенных иерархий в одном и том же XML-ресурсе с использованием вложенного <PreferenceScreen> больше не поддерживается. Вместо этого вы должны использовать вложенные Fragment объекты.

См. Также: onCreatePreferences и Организация ваших настроек

...