2016-01-31 2 views
1

Я получаю эту ошибку при раздувании макета для PreferenceFragment, но я не могу понять причину, потому что я не могу найти любой список в макете.Содержимое имеет представление с атрибутом id 'android.R.id.list', которое не является классом ListView

Здесь (тривиальное) расположение:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.myPath.SettingsFragment"> 
</FrameLayout> 

Вот код, который поднимет исключение Runtime:

public class SettingsFragment extends PreferenceFragment { 
    ... 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.fragment_settings, container, false); 
    } 
} 

Вот полный стек исключение:

Unable to start activity ComponentInfo{com.myPath.SettingsActivity}: 
    java.lang.RuntimeException: Content has view with id attribute 'android.R.id.list' 
    that is not a ListView class 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2658) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2723) 
    at android.app.ActivityThread.access$900(ActivityThread.java:172) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1422) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:145) 
    at android.app.ActivityThread.main(ActivityThread.java:5832) 
    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:1399) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1194) 
     Caused by: java.lang.RuntimeException: Content has view with id attribute 'android.R.id.list' that is not a ListView class 
    at android.preference.PreferenceFragment.ensureList(PreferenceFragment.java:397) 
    at android.preference.PreferenceFragment.getListView(PreferenceFragment.java:363) 
    at android.preference.PreferenceFragment.bindPreferences(PreferenceFragment.java:345) 
    at android.preference.PreferenceFragment.onActivityCreated(PreferenceFragment.java:185) 
    at android.app.Fragment.performActivityCreated(Fragment.java:2122) 
    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:927) 
    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1082) 
    at android.app.BackStackRecord.run(BackStackRecord.java:833) 
    at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1467) 
    at android.app.Activity.performStart(Activity.java:6257) 
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2621) 
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2723)  
    at android.app.ActivityThread.access$900(ActivityThread.java:172)  
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1422)  
    at android.os.Handler.dispatchMessage(Handler.java:102)  
    at android.os.Looper.loop(Looper.java:145)  
    at android.app.ActivityThread.main(ActivityThread.java:5832)  
    at java.lang.reflect.Method.invoke(Native Method)  
    at java.lang.reflect.Method.invoke(Method.java:372)  
+0

Просьба опубликовать всю трассировку стека. – CommonsWare

+0

@CommonsWare, опубликовано. Может быть, может помочь и код/​​макет родительской активности? – perissf

+1

Почему вы используете «PreferenceFragment» здесь, в первую очередь? Пункт «PreferenceFragment» заключается в отображении списка предпочтений, и вы, похоже, активно пытаетесь помешать ему отображать список предпочтений, заменив «ListView» на «FrameLayout». – CommonsWare

ответ

0

поскольку logcat показывает, что вам нужно иметь listview с id как android.R.id.list, чтобы он работал,

Кстати, почему добавление макета в предпочтениеФрагмент, я думаю, вам нужен фрагмент здесь. Фрагмент предпочтений используется для отображения списка опций, поэтому для его просмотра необходим список с этим идентификатором, чтобы он работал

+0

Я настраиваю список параметров, поэтому я использую PreferenceFragment. – perissf

+0

Почему они поставляют макет, удалите код onCreateView, чтобы решить проблему. –

+0

Да, это явно решает проблему, но я не вижу предпочтений, хотя это должен быть другой вопрос. – perissf