AndroidX: вложенный PreferenceScreen не открывается - PullRequest
0 голосов
/ 02 февраля 2020

Я использую библиотеку настроек AndroidX для управления настройками моего приложения. My SettingsFragment происходит от PreferenceFragmentCompat и загружает следующий макет:

<androidx.preference.PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">

    <androidx.preference.PreferenceScreen
        android:key="screen_backup_key"
        android:title="@string/local_database">

        <androidx.preference.Preference
            android:key="button_save_key"
            android:title="@string/export" />

        <androidx.preference.Preference
            android:key="button_load_key"
            android:title="@string/_import" />

    </androidx.preference.PreferenceScreen>

    <androidx.preference.Preference
            android:key="screen_about"
            android:title="@string/about" />

</androidx.preference.PreferenceScreen>

Макет отображается правильно, но когда я нажимаю на вложенную запись PreferenceScreen, ничего не происходит. Раньше он работал с PreferenceScreen из Support Library , которая сейчас устарела.

Я бы ожидал увидеть содержимое этого вложенного PreferenceScreen. Что я делаю не так?

1 Ответ

0 голосов
/ 02 февраля 2020

Это больше не поддерживается в библиотеке настроек AndroidX.

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

Вам нужен отдельный PreferenceFragmentCompat для каждого отдельного экрана.

Если у вас большое количество предпочтений или отдельных категорий, Вы можете отобразить их на отдельных экранах. Каждый экран должен быть PreferenceFragmentCompat со своей отдельной иерархией. Предпочтения на начальном экране могут затем ссылаться на подэкраны, которые содержат связанные предпочтения.

Вы делаете это следующим образом:

Чтобы связать экраны с предпочтением, вы можете объявить app:fragment в XML, или вы можете использовать Preference.setFragment(). Установите полное имя пакета для PreferenceFragmentCompat, которое должно запускаться при нажатии Preference, как показано ниже:

<Preference
    app:fragment="com.example.SyncFragment"
    .../>

Вот источник для дальнейшего чтение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...