【问题标题】:Why does the nested PreferenceScreen not open when using AndroidX?为什么使用 AndroidX 时嵌套的 PreferenceScreen 打不开?
【发布时间】:2020-02-02 19:34:39
【问题描述】:

我正在使用 AndroidX 的 Preference 库来管理我的应用设置。我的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 一起工作,现在已弃用。

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

【问题讨论】:

    标签: android kotlin android-preferences androidx preferencefragment


    【解决方案1】:

    AndroidX 的 Preference Library 不再支持它。

    在同一个 XML 资源中使用 不再支持嵌套的 PreferenceScreen。你应该使用 而是嵌套的 Fragment 对象。

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

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

    你这样做:

    要使用首选项链接屏幕,您可以在其中声明 app:fragment XML,或者您可以使用Preference.setFragment()。设置完整包 PreferenceFragmentCompat 的名称,应该在 Preference被点击,如下图:

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

    这里是source 供进一步阅读。

    【讨论】:

    • 我从没想过这是可能的......正如“屏幕”这个名字所暗示的那样。
    • 但实际上我是这样构建自己的偏好的。请参阅此段落,这意味着:“不再支持使用嵌套的 PreferenceScreen 在同一 XML 资源中声明嵌套层次结构。您应该改用嵌套的 Fragment 对象。”。因为起初我没有找到任何关于它的东西,所以我认为分享我的发现是个好主意。但也许我是唯一一个这样做的人:D
    • @MartinZeitler 我忘了给你加标签。见上文:)
    • 希望androidx.preference库能早日开发这个功能,暂时还是用android.preference
    猜你喜欢
    • 2019-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    相关资源
    最近更新 更多