ListActivity 之 ListView 研究

来源:互联网 发布:郭天祥十天单片机下载 编辑:程序博客网 时间:2024/06/08 07:02

ListActivity。这个类其实就是一个含有一个ListView组件的Activity类。显示一个绑定到数组或游标这些数据源的一个列表,并且列表的每一项提供一个点击事件的管理方法,当用户点击其中的列表项的时候就能进行相应的处理。也就是说,如果我们直接在一个普通的Activity中自己加一个ListView也是完全可以取代这个ListActivity的,只是它更方便而已。

ListActivity容纳了一个ListView对象,这个对象能够被绑定到不同的数据源,一般是一个数组或者存储了一组查询结果的游标。

 

屏幕布局

ListActivity的默认布局由一个位于屏幕中心的全屏列表构成。但是,如果你不想使用默认的布局,可以在onCreate()方法中通过setContentView()方法设定你自己定制的布局。

如果指定你自己定制的布局,你的布局中必须包含一个id为"@android:id/list"(如果是使用代码的形式,则是 list)的ListView 。此外,你自定义的view为空时,能够包含另外一个任何类型的view对象。

最近遇到问题:

在 activity_main XML 文件中定义了一个LIstview

<?xml version="1.0" encoding="utf-8"?><LinearLayout            android:id="@+id/LinearLayout01"            android:layout_width="fill_parent"            android:layout_height="fill_parent"            xmlns:android="http://schemas.android.com/apk/res/android">          <ListView android:id="@id/android:list"        android:layout_width="fill_parent"        android:layout_height="fill_parent"/>        </LinearLayout>  Java文件:public class MainActivity extends ListActivity   {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);                initList();}protected  void   initList () {//ListView list =(ListView)findViewById(R.id.list);}}

如果主类继承自 ListActivity ,因为ListActivity内部默认含有ListView,extends ListActivity,那么其实本身是不用setContentView,Android也会自动帮我们构造出一个全屏的列表。而该ListView没有xml来描述界面,所以必须在xml中定义一个id = "@id/android:list" 的listview控件,否则会报:you content must have a listview whose id....。直接用setListAdapter(adapter)设置datasource,绑定数据源 。

如果想用自定义ListView,那主类要继承自Activity,这个时候布局xml中listview的id可以随意定义,并且用ListView list =(ListView)findViewById(R.id.list) 取得这个list,list.setAdapter(adapter) 设置datasource,绑定数据源。

根据这两天尝试,ListActivity  和setContentView 共存,数据无法显示---这个问题已经解决了,竟然是在main.xml中没有设置 android:orientation="vertical" 排列方式导致的。没有设置这个,竟然会导致这个问题,无语。

以及用ListActivity   和 自定义list.setAdapter(adapter) 不共存----这个问题研究了一下:(1)ListView list = this.getListView(); list.setAdapter(adapter); 这样写程序没有问题。但是用ListView list =new ListView(this),必须用setListAdapter(adapter) 才行,这样不会有问题。具体为什么这样,求大神讲解!!

0 0
原创粉丝点击