ListView是Android开发中一个重要的组件,用于以垂直列表形式显示列表项。在许多应用中都有应用。他有一下两种方法生成视图列表:
直接在布局文件中使用ListView
让Activity继承ListActivity(相当于改Activity显示的组件为ListView)
ListView的常用XML属性:
android:divider 设置item的分隔条,也可用drawable分隔
android:dividerHeight 设置分隔条的高度
android:entries 指定一个数组资源,ListView显示的资源
android:footerDividersEnabled 控制footer View 之前是否绘制分隔条
android:headerDividersEnabled 控制header View 之后是否绘制分隔条
在布局中直接使用ListView:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ListView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:entries="@array/book"
></ListView>
</RelativeLayout>
上面的布局文件直接定义了一个ListView,并通过entries为ListView指定了列表数组。
上面的ListView指定了一个数组作为生成ListView的资源,该数组需在values文件夹中定义一个数组,资源文件如下:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="book">
<item >java</item>
<item >oracle</item>
<item >Android</item>
<item >jdbc</item>
</string-array>
</resources>
效果如下:
ListView可以直接在xml文件中使用,但灵活性很差,只能显示十分固定的数据,甚至于每个列表项的文字大小、颜色都不能改变。因此一般在Activity代码中使用Adapter的实现类(确切的说是BaseAdapter以及其子类)来为列表项进行配置。也就是使用了MVC原则,使ListView有了良好的扩展性。
几乎所有的Adapter都继承了BaseAdapter,而BaseAdapter同时实现了AbsListView和AbsSpinner接口,因此BaseAdapter及其子类可以同时为AbsListView、AbsSpinner提供列表项。
Adapter的常用实现类如下:
ArrayAdapter:通常用于将数组或集合的多个值包装成多个列表项。
SimpleAdapter:可用于将list集合的多个对象包装成多个列表项。
SimpleCurcorAdapter:与SimplementAdapter类似,只是用于包装Curcor提供的数据。
BaseAdapter:通常用于实现,可实现最大限度的定制列表项。
使用ArrayAdapter创建ListView:
在布局文件中定义ListView:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<ListView
android:id="@+id/main_lv"
android:layout_width="match_parent"
android:layout_height="match_parent"
></ListView>
</RelativeLayout>
接着在代码中对用Adapter对ListView进行配置:
public class MainActivity extends Activity {
private ListView lv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = (ListView) findViewById(R.id.main_lv);
final String[] book=new String[]{"hh","ddd","ddas"};
//第二个参数 去指定ListView中每一个列表项的布局方式
ArrayAdapter<String> adapter =
new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1,book);
//将Adapter加载到相应的ListView上
lv.setAdapter(adapter);
}
}
代码中定义了一个ListView用于接收布局文件中的ListView,声明了一个String类型的数组作为每个item显示的数据,接着创建一个ArrayAdapter实例,ArrayAdapter的构造方法需要我们传三个参数:
Context:几乎所有组件的创建都要传的参数。
textViewResourceId:显示每个item的布局,这里传入的是android库里的布局。
数组或List:需要显示的数据的数组或集合。
最后为这个ListView设置Adapter。
效果如下: