为什么使用 AndroidX 时嵌套的 PreferenceScreen 打不开?

Wil*_*zel 2 android android-preferences kotlin preferencefragment androidx

我正在使用 AndroidX 的首选项库来管理我的应用程序的设置。我的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>
Run Code Online (Sandbox Code Playgroud)

布局显示正确,但是当我单击嵌套PreferenceScreen条目时没有任何反应。它以前可以与支持库PreferenceScreen中的一起使用,但现在已弃用。

我希望看到这个嵌套的内容PreferenceScreen。我究竟做错了什么?

Wil*_*zel 6

AndroidX 的首选项库不再支持它。

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

每个单独的屏幕都需要一个单独的PreferenceFragmentCompat屏幕。

如果您有大量首选项或不同的类别,您可以将它们显示在单独的屏幕上。每个屏幕都应该有 PreferenceFragmentCompat自己独立的层次结构。然后,初始屏幕上的首选项可以链接到包含相关首选项的子屏幕。

你这样做:

要将屏幕与首选项链接,您可以在 XML 中声明app:fragment,也可以使用Preference.setFragment(). PreferenceFragmentCompat设置点击时要启动的 完整包名Preference,如下所示:

<Preference
    app:fragment="com.example.SyncFragment"
    .../>
Run Code Online (Sandbox Code Playgroud)

这是进一步阅读的来源

  • 我希望 androidx.preference 库能够尽快开发此功能,到目前为止仍保留 android.preference (2认同)