一、ListView
- ListView(列表控件)的表现形式类似于1个垂直方向排列了若干个列表项的线性布局。 常用的使用ListView控件显示的应用场景:联系人列表、通话记录、短信列表等。
- ListView的Item:列表项中的条目
- ListView的Adapter:适配器
二、ArrayAdapter
使用ArrayAdapter必须确定1个数据类型,该类型表示ListView展现的数据用哪种类型可以表示,例如显示联系人的名称,则该类型可以确定为String/CharSequence。
三、显示ListView的4个要素
- ListView控件:在layout布局中添加控件,配置id、宽度、高度属性即可。
- 数据源:ListView中需要显示的数据的集合,通常是List集合。
- 模板:约定列表项的外观,但是不约定显示的数据,表现为在res\layout\文件夹下的XML文件,当使用ArrayAdapter时,推荐创建的模板文件使用TextView作为根节点。
- Adapter:可以使用ArrayAdapter、SimpleAdapter、BaseAdapter。
四、ListView的开发流程
- 在布局中添加ListView控件
- 在res\layout\ 下创建新的XML文件,用于设计ListView列表项的模板
- 在Activity类中,使用List集合,创建数据源
- 在Activity类中,声明ListView控件,并初始化
- 在Activity类中,声明ArrayAdapter,并创建对象
- 在Activity类中,调用ListView对象的setAdapter方法,为ListView配置Adapter
下面是具体实现的代码
1. ListView列表项的模板 contact_item.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tv_contact"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="10dp"
android:text="@string/app_name"
android:textSize="20sp" />
2.activity布局文件 activity_main.xml
<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"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin >
<ListView
android:id="@+id/lv_contacts"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentTop="true" >
</ListView>
</RelativeLayout>
3.具体实现代码 MainActivity.java
public class MainActivity extends Activity {
/**
* ListView:显示联系人列表的列表控件
*/
private ListView lvContacts;
/**
* adapter:适配器,用于将数据映射到View上的工具
*/
private ArrayAdapter<String> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lvContacts = (ListView) findViewById(R.id.lv_contacts);
// 数据源
List<String> contacts = new ArrayList<String> ();
// 向列表中添加数据
contacts.add("梅西");
contacts.add("内马尔");
contacts.add("苏亚雷斯");
contacts.add("伊涅斯塔");
contacts.add("哈维");
contacts.add("图兰");
contacts.add("拉基蒂奇");
contacts.add("罗贝托");
contacts.add("布拉沃");
contacts.add("布斯克茨");
contacts.add("C.罗纳尔多");
contacts.add("贝尔");
contacts.add("本泽马");
contacts.add("阿尔维斯");
contacts.add("特尔斯特根");
contacts.add("皮克");
contacts.add("马斯切拉诺");
contacts.add("阿尔巴");
adapter = new ArrayAdapter<String>(
this, // context: 上下文对象
R.layout.contact_item, // textViewResourceId: 用于显示数据的模板
contacts); // List<String> objects: 用于放入列表的数据
lvContacts.setAdapter(adapter); // 为lvContacts配置adapter
}
}
效果图: