偏好设置支持库 - SwitchPreference不起作用

24
几天前,Google推出了Preference Support Library链接)。我刚刚尝试将其实现到我的应用程序中,但似乎它不能与SwitchPreferences一起工作,这很奇怪,因为Google声称我们可以像以前一样使用相同的XML文件,并明确表示现在所有API 7+设备都可以使用SwitchPreferences。
引用 (来源):

[...]并且可以使用相同的偏好XML文件添加偏好设置(http://goo.gl/wOcIxI),同时为所有API 7+设备添加对元素的支持 SwitchPreference(先前仅适用于API 14+设备)。 [...]

错误消息
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.my.package/com.my.package.Main}: android.view.InflateException: Binary XML file line #4: Error inflating class (not found)SwitchPreference
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
            at android.app.ActivityThread.access$800(ActivityThread.java:151)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5254)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

显然相关部分是Binary XML file line #4: Error inflating class (not found)SwitchPreference

Java代码

public class FragmentSettings extends PreferenceFragmentCompat {

    @Override
    public void onCreatePreferences(Bundle bundle, String s) {
        addPreferencesFromResource(R.xml.preferences);
    }
}

preferences.xml

<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">

    <SwitchPreference
        android:key="pref_something"
        android:summary="Lorem ipsum dolor sit amet"
        android:title="Lorem ipsum" />

</PreferenceScreen>

基本上问题是:我是否做错了什么,还是这确实是首选项支持库的一个 bug?


你正在测试的设备使用的是哪个Android版本? - Derek Fung
@DerekFung 22 (5.1.1) - user3420815
1个回答

62

SwitchPreference 在 API 等级 14 中添加。如果您使用的是 Preferences Support Library v7,则必须改用 SwitchPreferenceCompat

<SwitchPreferenceCompat
    android:key="pref_something"
    android:summary="Lorem ipsum dolor sit amet"
    android:title="Lorem ipsum" />

3
就是这样了。我已经考虑过类似的事情,不幸的是我找不到任何内容——有时文档太糟糕了。Google 应该在 SwitchPreference 页面中提及 SwitchCompatPreference。SwitchCompatPreference - user3420815

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