androidx.preference.ListPreference对话框崩溃

时间:2020-02-22 18:40:54

标签: android androidx android-jetpack

android.preference更改为androidx.preference后,我的 ListPreferences 对话框崩溃了(请参见下面的stacktrace)。

这是我的xml(简称):

<androidx.preference.PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:title="@string/settings">
    <androidx.preference.PreferenceCategory
        android:key="preference_category_ui"
        android:title="@string/preference_category_ui"
        app:iconSpaceReserved="false">
        <androidx.preference.ListPreference
            android:defaultValue="dark"
            android:dialogTitle="@string/theme_title"
            android:entries="@array/themes_entries"
            android:entryValues="@array/themes_values"
            android:key="theme"
            android:title="@string/theme_title"
            app:iconSpaceReserved="false" />
    </androidx.preference.PreferenceCategory>
</androidx.preference.PreferenceScreen>

我的首选项没有图标。创建了活动片段,但是单击任何 ListPreference 时,都会出现以下异常:

android.content.res.Resources$NotFoundException: Resource ID #0x0
    at android.content.res.ResourcesImpl.getValue(ResourcesImpl.java:216)
    at android.content.res.Resources.loadXmlResourceParser(Resources.java:2155)
    at android.content.res.Resources.getLayout(Resources.java:1155)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:421)
    at android.view.LayoutInflater.inflate(LayoutInflater.java:374)
    at androidx.appcompat.app.AlertController$AlertParams.createListView(AlertController.java:989)
    at androidx.appcompat.app.AlertController$AlertParams.apply(AlertController.java:965)
    at androidx.appcompat.app.AlertDialog$Builder.create(AlertDialog.java:984)
    at androidx.preference.PreferenceDialogFragmentCompat.onCreateDialog(PreferenceDialogFragmentCompat.java:158)
    at androidx.fragment.app.DialogFragment.onGetLayoutInflater(DialogFragment.java:403)
    at androidx.fragment.app.Fragment.performGetLayoutInflater(Fragment.java:1484)
    at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:320)
    at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1187)
    at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1356)
    at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1434)
    at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1497)
    at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:447)
    at androidx.fragment.app.FragmentManager.executeOps(FragmentManager.java:2169)
    at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1992)
    at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1947)
    at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1849)
    at androidx.fragment.app.FragmentManager$4.run(FragmentManager.java:413)
    at android.os.Handler.handleCallback(Handler.java:873)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:193)
    at android.app.ActivityThread.main(ActivityThread.java:6923)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:870)

我想念什么?

1 个答案:

答案 0 :(得分:2)

解决方案是使用 Theme.AppCompat 作为基本主题。显然,android:Theme.Material和其他SDK主题不适用于Androidx首选项。

更改此:

<style name="DefaultDarkTheme" parent="android:Theme.Material">

对此:

<style name="DefaultDarkTheme" parent="Theme.AppCompat">

活动必须扩展androidx.appcompat.app.AppCompatActivity

相关问题