-4

В моем приложении с использованием библиотеки поддержки v7 я хочу добавить экран настроек. Поскольку Google не предоставляет абсолютно никакой документации по этому вопросу, я просмотрел сообщение, найденное здесь в разделе «Переполнение стека».Как использовать предпочтения в библиотеке поддержки Android v7 rev23?

Так что это мой проект:

activity_preferences.xml

<?xml version="1.0" encoding="UTF-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:support="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <include layout="@layout/toolbar_default"/> 

    <fragment 
     android:name=".FragmentPreferences" 
     name=".FragmentPreferences" 
     android:tag=".FragmentPreferences" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

</LinearLayout> 

ActivityPreferences.java

package com.example.testandroidsupportv7; 

import com.example.testandroidsupportv7.R; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 

public class ActivityPreferences extends AppCompatActivity 
{ 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_preferences); 
    } 

} 

FragmentPreferences.java

package com.example.testandroidsupportv7; 

import com.example.testandroidsupportv7.R; 
import android.os.Bundle; 
import android.support.v7.preference.PreferenceFragmentCompat; 

public class FragmentPreferences extends PreferenceFragmentCompat 
{ 

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

} 

AndroidManifest.xml

<activity 
     android:name=".ActivityPreferences" 
     android:label="@string/app_name" 
     android:theme="@style/MyTheme.NoActionBar" > 
</activity> 

XML/preferences.xml

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

    <android.support.v7.preference.PreferenceCategory 
     android:title="Splošne nastavitve" > 

     <android.support.v7.preference.CheckBoxPreference 
      android:key="PREFERENCE_KEY_CHECK_BOX" 
      android:defaultValue="false" 
      android:summaryOff="Value is OFF." 
      android:summaryOn="Value is ON." 
      android:title="Check box preference" /> 

    </android.support.v7.preference.PreferenceCategory> 

</android.support.v7.preference.PreferenceScreen> 

Если я пытаюсь начать эту деятельность предпочтение я получаю исключение.

LogCat

FATAL EXCEPTION: main 
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.testandroidsupportv7/com.example.testandroidsupportv7.ActivityPreferences}: android.view.InflateException: Binary XML file line #11: Error inflating class fragment 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667) 
    at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667) 
    at android.os.Handler.dispatchMessage(Handler.java:99) 
    at android.os.Looper.loop(Looper.java:130) 
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.testandroidsupportv7/com.example.testandroidsupportv7.ActivityPreferences}: android.view.InflateException: Binary XML file line #11: Error inflating class fragment 
    at android.app.ActivityThread.main(ActivityThread.java:3691) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:507) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:907) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:665) 
    at dalvik.system.NativeStart.main(Native Method) 
Caused by: android.view.InflateException: Binary XML file line #11: Error inflating class fragment 
FATAL EXCEPTION: main 
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:581) 
    at android.view.LayoutInflater.rInflate(LayoutInflater.java:623) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:408) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:320) 
    at android.view.LayoutInflater.inflate(LayoutInflater.java:276) 
    at android.support.v7.app.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.java:257) 
    at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:109) 
    at com.example.testandroidsupportv7.ActivityPreferences.onCreate(ActivityPreferences.java:13) 
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615) 
    ... 11 more 
Caused by: java.lang.ClassNotFoundException: android.view.fragment in loader dalvik.system.PathClassLoader[/data/app/com.example.testandroidsupportv7-2.apk] 
    at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:551) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:511) 
    at android.view.LayoutInflater.createView(LayoutInflater.java:471) 
    at android.view.LayoutInflater.onCreateView(LayoutInflater.java:549) 
    at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:66) 
    at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:568) 
    ... 20 more 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1651) 

Что не так с этим кодом? Это должно сработать. Указанное исключение вызывает недоумение и не дает никаких подсказок. В Google нет документации и нет рабочего примера. То, что я считаю подозрительным, - это линия:

Caused by: java.lang.ClassNotFoundException: android.view.fragment in loader dalvik.system.PathClassLoader[/data/app/com.example.testandroidsupportv7-2.apk]

Как избавиться от этого исключения?

UPDATE

Я бегу на андроид 2.3.5 устройства. Я добавил preference.xml

+0

Возможно ли это в вашей деятельности_preferences.xml - name = ".FragmentPreferences" – mjp66

+2

Также см. [Проконсультирование по использованию библиотеки поддержки настроек] (https://plus.google.com/+AndroidDevelopers/posts/ 9kZ3SsXdT2T) – ianhanniballake

+0

@ianhanniballake Я прочитал это и многое другое. – f470071

ответ

7

Ваши LogCat намеки на ошибки: XML file line #11: Error inflating class fragment - подозрительная линия, кажется, name=".FragmentPreferences", который вы, вероятно, хотел быть android:name=".FragmentPreferences". Так как у вас уже есть, что просто удалить ошибочную линию :)

<fragment 
    android:name=".FragmentPreferences" 
    android:tag=".FragmentPreferences" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" /> 

UPDATE:, если это не сработает, то другая совершенно очевидно, ошибка в значении android:name. Оно должно быть:

android:name="com.example.testandroidsupportv7.FragmentPreferences" 

или то, что ВАШ реальный путь к классу FragmentPreferences.

Я даже построил свой проект на своем конце, для создания, тестирования и подтверждения ошибки потребовалось всего 5 минут; Я получил точно такую ​​же ошибку, как и вы, когда я исправил android:name, он строит просто отлично.Скриншот:

enter image description here

Я надеюсь, что вы будете извиниться перед всеми за свое поведение ... это не то, как идти о получении помощи от людей на SO.

UPDATE 2: частичного LogCat от моего телосложения, с ошибочным андроидом: значение имени:

11-07 14:00:24.742 26456-26456/com.example.testandroidsupportv7 E/AndroidRuntime: FATAL EXCEPTION: main 
11-07 14:00:24.742 26456-26456/com.example.testandroidsupportv7 E/AndroidRuntime: Process: com.example.testandroidsupportv7, PID: 26456 
11-07 14:00:24.742 26456-26456/com.example.testandroidsupportv7 E/AndroidRuntime: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.testandroidsupportv7/com.example.testandroidsupportv7.ActivityPreferences}: android.view.InflateException: Binary XML file line #8: Error inflating class fragment 
11-07 14:00:24.742 26456-26456/com.example.testandroidsupportv7 E/AndroidRuntime:  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2345) 
11-07 14:00:24.742 26456-26456/com.example.testandroidsupportv7 E/AndroidRuntime:  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2405) 
11-07 14:00:24.742 26456-26456/com.example.testandroidsupportv7 E/AndroidRuntime:  at android.app.ActivityThread.access$800(ActivityThread.java:155) 
11-07 14:00:24.742 26456-26456/com.example.testandroidsupportv7 E/AndroidRuntime:  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1323) 
... 
11-07 14:00:24.742 26456-26456/com.example.testandroidsupportv7 E/AndroidRuntime: Suppressed: java.lang.ClassNotFoundException: Invalid name: .FragmentPreferences 

зависимости:

compile 'com.android.support:support-v4:23.1.0' 
compile 'com.android.support:appcompat-v7:23.1.0' 
compile 'com.android.support:preference-v7:23.1.0' 
compile 'com.android.support:design:23.1.0' 

Пожалуйста, не спрашивай меня в настоящее время найти 2.3 .5 для тестирования.

+2

Это не низкое качество. Ваш лог-код указывает на ошибку в представлении фрагмента xml, и сразу становится очевидным, где эта ошибка; если удаление этой строки по-прежнему дает вам ошибки, вы по-прежнему знаете, где продолжать искать. Я с удовольствием постараюсь помочь вам понять, что говорит вам ваш лог-код, но я, конечно же, не буду продолжать делать для вас всю свою работу. – mjp66

+0

Я пробовал все возможные комбинации, которые я мог бы придумать. andrind: имя, имя, класс, android: класс, короткие имена классов, имена полного класса, тег, android: тег и все cobinations между ними. Около 60 различных попыток. Каждому из них требуется время. – f470071

+0

, пожалуйста, проверьте это http://stackoverflow.com/questions/22885261/android-error-inflating-class-preferencescreen –

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

  • Нет связанных вопросов^_^