我做了一个简单的PreferenceScreen,有多个Preference Categorys和CheckBoxPreferences.
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <PreferenceCategory android:title="General"> <CheckBoxPreference android:title="GPS" android:key="gps_preference" android:summary="Enales the GPS tracking of your device" android:defaultValue="true" ></CheckBoxPreference> <SwitchPreference android:title="WLAN" android:key="wlan_preference" android:summary="Enables the WLAN usage" android:defaultValue="true"></SwitchPreference> <CheckBoxPreference android:title="Benachrichtigungen" android:key="benachrichtigung_preference" android:summary="Enables the Push messages" android:defaultValue="true" ></CheckBoxPreference> </PreferenceCategory> </PreferenceScreen>
此首选项屏幕位于android.support.v7.preference.PreferenceFragmentCompat中.如果我像往常一样离开,那一切都很好.
但是,如果我想为SwitchPreference切换一个CheckBoxPreference(这应该只需通过SwitchPreference切换CheckBoxPreference的xml标签)我在设计选项卡中出现渲染错误:
Exception raised during rendering:
android.preference.CheckBoxPreference cannot be cast to
android.preference.GenericInflater$Parent
堆栈跟踪:
android.view.InflateException: Binary XML file line #15: Error inflating class (not found)SwitchPreference at android.support.v7.preference.PreferenceInflater.createItemFromTag(PreferenceInflater.java:301) at android.support.v7.preference.PreferenceInflater.rInflate(PreferenceInflater.java:359) at android.support.v7.preference.PreferenceInflater.rInflate(PreferenceInflater.java:361) at android.support.v7.preference.PreferenceInflater.inflate(PreferenceInflater.java:167) at android.support.v7.preference.PreferenceInflater.inflate(PreferenceInflater.java:117) at android.support.v7.preference.PreferenceManager.inflateFromResource(PreferenceManager.java:115) at android.support.v7.preference.PreferenceFragmentCompat.setPreferencesFromResource(PreferenceFragmentCompat.java:424) at com.julianriegraf.app2night.SettingsFragment.onCreatePreferences(SettingsFragment.java:22) at android.support.v7.preference.PreferenceFragmentCompat.onCreate(PreferenceFragmentCompat.java:216) at android.support.v4.app.Fragment.performCreate(Fragment.java:2062) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1051) at android.support.v4.app.BackStackRecord.setLastIn(BackStackRecord.java:795) at android.support.v4.app.BackStackRecord.calculateFragments(BackStackRecord.java:835) at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:676) at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1671) at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:532) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) Caused by: java.lang.ClassNotFoundException: Didn't find class "android.support.v7.preference.SwitchPreference" on path: DexPathList[[zip file "/data/app/com.julianriegraf.app2night-2/base.apk"],nativeLibraryDirectories=[/data/app/com.julianriegraf.app2night-2/lib/x86,/vendor/lib,/system/lib]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56) at java.lang.ClassLoader.loadClass(ClassLoader.java:511) at java.lang.ClassLoader.loadClass(ClassLoader.java:469) at android.support.v7.preference.PreferenceInflater.createItem(PreferenceInflater.java:233) at android.support.v7.preference.PreferenceInflater.onCreateItem(PreferenceInflater.java:281) at android.support.v7.preference.PreferenceInflater.createItemFromTag(PreferenceInflater.java:290) at android.support.v7.preference.PreferenceInflater.rInflate(PreferenceInflater.java:359) at android.support.v7.preference.PreferenceInflater.rInflate(PreferenceInflater.java:361) at android.support.v7.preference.PreferenceInflater.inflate(PreferenceInflater.java:167) at android.support.v7.preference.PreferenceInflater.inflate(PreferenceInflater.java:117) at android.support.v7.preference.PreferenceManager.inflateFromResource(PreferenceManager.java:115) at android.support.v7.preference.PreferenceFragmentCompat.setPreferencesFromResource(PreferenceFragmentCompat.java:424) at com.julianriegraf.app2night.SettingsFragment.onCreatePreferences(SettingsFragment.java:22) at android.support.v7.preference.PreferenceFragmentCompat.onCreate(PreferenceFragmentCompat.java:216) at android.support.v4.app.Fragment.performCreate(Fragment.java:2062) at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1051) at android.support.v4.app.BackStackRecord.setLastIn(BackStackRecord.java:795) at android.support.v4.app.BackStackRecord.calculateFragments(BackStackRecord.java:835) at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:676) at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1671) at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:532) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5417) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
解决方法
没有名为android.support.v7.preference.SwitchPreference的类.有android.support.v7.preference.SwitchPreferenceCompat,android.support.v14.preference.SwitchPreference和原生的android.preference.SwitchPreference.