17

Несколько дней назад Google представил Preference Support Library (). Я просто попытался реализовать его в своем приложении, хотя кажется, что он не работает с SwitchPreferences, что странно, потому что Google заявляет, что мы можем использовать те же XML-файлы, что и раньше, и объяснение говорит, что SwitchPreferences теперь доступны для всех API 7+ устройства.Предпочтения Поддержка Библиотека - SwitchPreference не работает

Цитата (Source)

[...] и добавить предпочтения, используя тот же предпочтение XML-файлы (http://goo.gl/wOcIxI), при добавлении поддержки для таких элементов, как SwitchPreference (ранее доступны только на API 14+ устройства) для всех устройств API 7+. [...]

Сообщение об ошибке

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> 

Так в основном вопрос: Могу ли я сделать что-то неправильно, или это действительно ошибка библиотеки Предпочтение поддержки?

+0

Какая версия для Android устройства вы тестируете? –

+0

@DerekFung 22 (5.1.1) – user3420815

ответ

44

SwitchPreference добавлен в уровень API 14. Если вы используете библиотеку поддержки предпочтений v7, вместо этого вы должны использовать SwitchPreferenceCompat.

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

Вот и все. Я уже думал о чем-то подобном, к сожалению, я ничего не мог найти - иногда иногда сосать. Google должен действительно упомянуть [SwitchCompatPreference] (https://developer.android.com/reference/android/support/v7/preference/SwitchPreferenceCompat.html) в [SwitchPreference] (http://developer.android.com/reference/ android/preference/SwitchPreference.html). – user3420815

Смежные вопросы