Your content must have a ListView whose id attribute is 'android.R.id.list' 解决方法

来源:互联网 发布:国外保健品网络销售 编辑:程序博客网 时间:2024/05/29 16:24

解决方法一:

如果你继承了ListActivity,那么可以尝试改成Activity。

解决方法二:(转自:http://wchlt.blog.163.com/blog/static/219605720142204018727/)

在ListView显示列表的时候,必须在main.xml文件里加上ListView这一个控件把标签ListView的id改为“android:id/list” 这个id表示是系统自带的id,因为如果是你在main.xml里定义的listView不用默认的id.你可以去查看R.java这里id只代表一个控件,并不是layout但是这里需要的id是一个layout所以这样写只能是layout所有会报错,如果把listView单独定义为一个xml文件 ,那么他生成 的id为layout对应的id,这样再R.id.list就不会出错了……


如果一定要使用ListView定义在main.xml文件里面需要用到Adapter的另一个构造方法:

ArrayAdapter(Context context, int resource, int textViewResourceId, List<T> objects)

第二第三个参数,需要加上list_item.xml和需要显示的TextView的id,指定数据显示的layout和显示的控件

如果用到了getListView()方法 ,那么也必须在main.xml文件 里定义一个ListView,并且id必须为android.R.id.list

当我们在主Activity里调用了;

super.onCreate(savedInstanceState); setContentView(R.layout.main); SimpleAdapter adapter = new SimpleAdapter(this,getData(),R.layout.list_view, new String[]{"title","info","img"}, new int[]{R.id.title,R.id.info,R.id.img}); setListAdapter(adapter);

其中调用用了setContentView(R.layout.man)的时候,如果要用ListView显示列表,就必须,在main.xml文件里添加控件ListView且id为android:id/list

如果把上面的setContentView(R.layout.man)去掉,再用ListView显示列表,也不会出错。。。。。。

解决方法三:(转自:http://blog.csdn.net/listening_music/article/details/6903043)

在Android开发中,ListView有着很重要的地位,使用的场合也非常的多,so我们当然要学会好好应用这个如此强大的空间喽~so,在前面的博客中也已经有了对ListView应用的相关介绍,尤其是自定义ListView那篇(BaseAdapter那个)~~~

但是但是……这个控件也是常用控件中比较复杂且编写代码时容易出错的控件之一!!在以后的博客中会依次介绍,现在就先说一下大家肯定也遇到的这个问题吧:

错误提示:Your content must have a ListView whose id attribute is 'android.R.id.list'

对于以上错误,其实可能是因为我们要实现对ListView中setOnItemClick的事件监听而去继承了LiseActivity,但是却没有ListView的标签,网上有说过只要在布局文件中添加如下代码即可:

[html] view plaincopyprint?
  1. <span style="font-family:Arial, sans-serif, Helvetica, Tahoma;"><ListView   
  2. android:id="@android:id/list" 或android:id="@id/android:list"  
  3. android:layout_width="fill_parent"  
  4. android:layout_height="wrap_content">  
  5. </ListView></span>  


但是如果我们其实是为了实现自定义的ListView呢?也就是我们后面是通过在BaseAdapter中实现对ListView中空间的监听的,那我们这边就只要继承Activity就可以了的。但是注意,我们毕竟用的是ListView,而我们又没有去继承ListActivity,因此,我们一定要记得在工程中声明一个ListView对象并对其进行实例化,这样我们同样可以得到我们要的ListView了哈~只不过这个时候我们就不能像之前那样直接override  ListActivity中的onListItemClick方法来实现对ListView的点击事件的监听了(当然这边所说的点击事件不包括ListView中Button之类的哈,这个可以在Baseadapter中的getView中实现啦^_<)

不用着急哈,不要忘了我们还有自己实例化的那个ListView哈,有了这个就可以通过这个调用setOnItemClickListener方法喽~具体如下:

[java] view plaincopyprint?
  1. listView.setOnItemClickListener(new OnItemClickListener() {  
  2.   
  3.   
  4. @Override  
  5. public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,  
  6. long arg3) {  
  7. // TODO Auto-generated method stub  
  8. Log.i("TAG","The Item has been clicked");  
  9. }  
  10. });  


而这个时候我们也就依然能像之前介绍的那样用与系统提供的SimpleAdapter提供的一样的构造方法来调用我们自己自定义的BaseAdapter喽


just 温馨小Tip  :  BaseAdapter的使用可以参考后面的链接哟^_^:http://blog.csdn.net/listening_music/article/details/6581708



0 0