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 {
@Override
protected 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) 才行,这样不会有问题。具体为什么这样,求大神讲解!!