迁移偏好设置至AndroidX

5

我正在尝试将旧的自动生成设置活动(来自Android Studio中的活动画廊)迁移到AndroidX。不幸的是,我找不到任何关于如何做到这一点的信息。官方文档并没有提供很大的帮助,因为它们假定您已经有了所有的代码,可以添加您的首选项片段和XML

我尝试将旧的PreferenceScreen切换到AndroidX,将PreferenceFragment切换到PreferenceFragmentCompat,但这只会导致运行时异常。

有人知道如何执行此类迁移吗?


请确保您添加了此实现 'androidx.preference:preference:1.0.0'。您使用的是Java还是Kotlin? - Shudipto Trafder
我正在使用Java,并且已经添加了该依赖项。 - krojew
抱歉!我没有任何Java参考资料,但我在几乎每个项目中都使用Kotlin中的PreferenceFragmentCompat。你能分享一下错误吗? - Shudipto Trafder
android.preference.PreferenceActivity.switchToHeaderInner() throws android.app.Fragment$InstantiationException: Trying to instantiate a class xxx.SettingsActivity$GeneralPreferenceFragment that is not a Fragment - krojew
3个回答

3
回答自己的问题 - 迁移现有的偏好设置活动并不值得。按照文档中的方法,创建一个空的活动并手动设置片段更快。在这种情况下,一切似乎都能正常工作,并且大部分以前的代码未使用。

1

我需要将一个现有项目迁移到AndroidX。

所以我切换到了PreferenceFragmentCompat

这里是一些示例代码,以便让您了解:

Java:

public class SettingsFragment extends
        androidx.preference.PreferenceFragmentCompat implements
        androidx.preference.Preference.OnPreferenceClickListener,
        androidx.preference.Preference.OnPreferenceChangeListener {
       // ... your code
}

xml:

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

    <androidx.preference.PreferenceCategory
        android:key="@string/PREF_CAT_MAIN"
        android:title="@string/pref_cat_main">

        <androidx.preference.CheckBoxPreference
            android:key="@string/TOUCH_TWICE_TO_EXIT"
            android:summary="@string/pref_sum_touch_twice_to_exit"
            android:title="@string/pref_title_touch_twice_to_exit" />

    </androidx.preference.PreferenceCategory>

</androidx.preference.PreferenceScreen 

-2

在 Android Studio 的功能区中选择重构选项,然后单击迁移到AndroidX

此外,在build.properties文件中添加这两行:

android.useAndroidX=true
android.enableJetifier=true

这些代码将强制那些没有迁移到 AndroidX 的类在迁移时进行迁移。

注意:当提示备份项目时,请备份您的项目!如果您对 AndroidX 不太了解,请先备份您的项目,然后再尝试!


8
很遗憾,这不能迁移偏好设置。 - krojew

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接