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
在 Android 上的 ListFragment 中使用 ArrayAdapter 获取构造函数错误
我无法从 ListFragment 内的 onListItemClick 开始新活动