【问题标题】:Content has view with id attribute 'android.R.id.list' that is not a ListView class内容具有 id 属性为“android.R.id.list”的视图,该视图不是 ListView 类
【发布时间】:2016-01-31 16:59:21
【问题描述】:

我在为 PreferenceFragment 扩展布局时收到此错误,但我无法找到原因,因为我在布局中找不到任何列表。

这是(简单的)布局:

<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>

这是引发运行时异常的代码:

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) 

【问题讨论】:

  • 请发布整个堆栈跟踪。
  • @CommonsWare ,已发布。也许父活动的代码/布局也可以提供帮助?
  • 你为什么首先在这里使用PreferenceFragmentPreferenceFragment 背后的要点是显示首选项列表,您似乎正在积极尝试阻止它显示首选项列表,方法是将 ListView 替换为 FrameLayout
  • @CommonsWare,所以我应该在我的布局中用 ListView 替换 FrameLayout 吗?这看起来很公平......但即使在其中使用android:id="@+id/list",也会导致同样的错误。相关问题:真的有必要为 PreferenceFragment 创建布局还是有其他方法?
  • "那么我应该在我的布局中将 FrameLayout 替换为 ListView 吗?" -- 最有可能的是,您应该消除布局和onCreateView() 方法。 PreferenceFragment 已经有一个布局。 “是否真的有必要为 PreferenceFragment 创建布局” - 不。事实上,我从未见过有人为 PreferenceFragment 创建布局。

标签: android layout preferencefragment


【解决方案1】:

正如 logcat 显示的那样,您需要一个 id 为 android.R.id.list 的列表视图才能正常工作,

顺便说一句,为什么要向preferenceFragment 添加布局,我认为你需要Fragment。 Preference Fragment 用于显示选项列表,因此它需要一个具有该 ID 的列表视图才能正常工作

【讨论】:

  • 我正在设置一个选项列表,这就是我使用 PreferenceFragment 的原因。
  • 为什么要为其提供布局,删除onCreateView代码解决问题
  • 是的,这显然解决了问题,但我看不到偏好,虽然这应该是另一个问题..
  • 为什么不使用listview呢
  • 在你的布局中创建一个带有提到的 id 的列表视图,你也可以这样做
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-04-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-18
相关资源
最近更新 更多