ListFragment:运行时错误“您的内容必须有一个 id 属性为 'android.R.list' 的 ListView

Posted

技术标签:

【中文标题】ListFragment:运行时错误“您的内容必须有一个 id 属性为 \'android.R.list\' 的 ListView【英文标题】:ListFragment: Runtime error "Your content must have a ListView whose id attribute is 'android.R.list'ListFragment:运行时错误“您的内容必须有一个 id 属性为 'android.R.list' 的 ListView 【发布时间】:2015-07-09 11:47:41 【问题描述】:

我有一个 listfragment 类:

public class activityfeedScreen extends ListFragment implements OnItemClickListener 

private ListView activityfeed_feedList_listView;
private ActivityFeedBaseAdapter adapter;

public static final activityfeedScreen newInstance()

    activityfeedScreen fragment = new activityfeedScreen();
    Bundle bdl = new Bundle(1);
    fragment.setArguments(bdl);
    return fragment;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) 
    View v = inflater.inflate(R.layout.activity_activityfeed_screen, container, false);

    activityfeed_feedList_listView = (ListView)v.findViewById(R.id.activityfeed_feedList_listView);
    activityfeed_feedList_listView.setAdapter(adapter);
    activityfeed_feedList_listView.setOnItemClickListener(this);

    return v;

@Override
public void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);

public void onItemClick(AdapterView<?> activityfeedlistview, View view, int position, long itemID) 
    Intent intent_activityfeed_showitemdescription = new Intent(view.getContext(), activityfeedItemScreen.class);
    startActivity(intent_activityfeed_showitemdescription);


在这堂课中,我遇到了一个错误:

    activityfeed_feedList_listView = (ListView)v.findViewById(R.id.activityfeed_feedList_listView);  

我最初认为这是由于 getView() 为空而导致的问题,因此我将其从 onCreate 方法移至 onCreateView() 方法。但是我收到了标题中所述的运行时错误。 这是我的布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_
android:background="#E5E5E5"
android:layout_>

<RelativeLayout
    android:layout_
    android:layout_
    android:layout_marginTop="10dp"
    android:layout_marginRight="10dp"
    android:layout_marginLeft="10dp">

    <ImageView
        android:id="@+id/activityfeed_profilePicture_imageView"
        android:layout_
        android:layout_
        android:layout_centerVertical="true"
        android:layout_alignParentLeft="true"
        android:src="@drawable/default_profile"/>

</RelativeLayout>
<RelativeLayout
    android:layout_
    android:layout_
    android:background="#B9B9B9"
    android:layout_marginTop="20dp">

    <ListView
        android:id="@+id/activityfeed_feedList_listView"
        android:layout_
        android:layout_>

        </ListView>
    </RelativeLayout>

我知道我必须将列表视图 ID 更改为

android:id="@android:id/list"

但我不确定如何在我的 onCreateView 方法中调用它。

感谢您的帮助!

【问题讨论】:

【参考方案1】:

是的。首先,您必须像这样更改 ListView 的 ID:

<ListView
    android:id="@android:id/list"
    android:layout_
    android:layout_>
</ListView>

在您的onCreateView 中,您可以通过android.R.id.list 引用ID。这是因为 Android 内置资源位于android.R。您还可以在其中找到可绘制对象、样式等(您可以以类似的方式调用它们)。

考虑到上述情况,您的 onCreateView 方法应如下所示:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) 
    View v = inflater.inflate(R.layout.activity_activityfeed_screen, container, false);

    activityfeed_feedList_listView = (ListView)v.findViewById(android.R.id.list);
    activityfeed_feedList_listView.setAdapter(adapter);
    activityfeed_feedList_listView.setOnItemClickListener(this);

    return v;

就是这样;)

【讨论】:

【参考方案2】:

onCreateView() 中,您需要提供具有ListView 和ID 为@android:id/list 的布局。

ListFragment 提供了一些辅助方法(例如 setListAdapter()),这些方法要求布局具有带有该 ID 的 ListView,以便它可以引用它并为您设置适配器。

【讨论】:

但是我将如何引用列表视图?例如,如果我在布局中将列表视图标识为@android:id/list,我将如何在我尝试“findViewbyId”并将其引用到 ListView 对象的下一行中调用它? 像这样:(ListView) v.findViewById(android.R.id.list);

以上是关于ListFragment:运行时错误“您的内容必须有一个 id 属性为 'android.R.list' 的 ListView的主要内容,如果未能解决你的问题,请参考以下文章

IllegalStateException,指定的孩子已经有一个父母 - ListFragment

ListFragment 错误

在 Android 上的 ListFragment 中使用 ArrayAdapter 获取构造函数错误

我无法从 ListFragment 内的 onListItemClick 开始新活动

ListFragment(或 Fragment)中的 BaseAdapter 不起作用

列表项单击时 ListFragment 不会替换 ListFragment