ListView是最常用同时也是较为难用的控件,ListView中的每一个子项为一个Item,可以是字符串也可以是组合控件(图片与文字组合)。
要实现ListView,首先现在布局文件中定义ListView控件:
activity_main.xml
<LinearLayout 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:orientation="vertical"
>
<ListView
android:id="@+id/list_view"
android:layout_width="match_parent"
android:layout_height="match_parent"></ListView>
</LinearLayout>
这里定义完listview控件之后,就需要实现listview显示内容的实现。listview是用来显示大量数据的,所以我们需要先将数据准备好(一维或者多维数组),但是这些数据无法直接传给listview进行显示。所以我们需要适配器帮助我们完成传递。适配器其实就是Item数组,listview中的每一个子项均是一个Item。数组中有多少元素,listview就包含多少个Item(子项)。
我比较常用的适配器是ArrayAdapter,它通过泛型来指定需要适配的数据类型,然后再构造函数中把需要适配的数据传入即可。在本次实例中,我们需要适配的数据是String类型,因此将ArrayAdapter的泛型指定为String。另外重要的一点,我们还需要指定listview子项的布局文件,同样在适配器的构造函数中引入。
ListActivity.java
public class ListActivity extends Activity {
private List<Fruit> fruitList = new ArrayList<Fruit>();
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化水果资源
initFruits();
//R.layout.fruit_item为子项布局文件
FruitAdapter adapter = new FruitAdapter(ListActivity.this,R.layout.fruit_item,fruitList);
ListView listView = (ListView) findViewById(R.id.list_view);
//将adapter装入listview中
listView.setAdapter(adapter);
//为listview中每个子项添加点击监听事件
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Fruit fruit = fruitList.get(i);
Toast.makeText(ListActivity.this,fruit.getName(),Toast.LENGTH_SHORT).show();
}
});
}
//装入适配器的数据的初始化,数据类型与ArrayAdapter指定的泛型数据类型必须一致
public void initFruits(){
Fruit apple = new Fruit("Apple",R.drawable.apple_pic);
fruitList.add(apple);
Fruit banana = new Fruit("Banana",R.drawable.banana_pic);
fruitList.add(banana);
Fruit orange = new Fruit("Orange", R.drawable.orange_pic);
fruitList.add(orange);
Fruit watermelon = new Fruit("Watermelon", R.drawable.watermelon_pic);
fruitList.add(watermelon);
Fruit pear = new Fruit("Pear", R.drawable.pear_pic);
fruitList.add(pear);
Fruit grape = new Fruit("Grape", R.drawable.grape_pic);
fruitList.add(grape);
Fruit pineapple = new Fruit("Pineapple", R.drawable.pineapple_pic);
fruitList.add(pineapple);
Fruit strawberry = new Fruit("Strawberry", R.drawable.strawberry_pic);
fruitList.add(strawberry);
Fruit cherry = new Fruit("Cherry", R.drawable.cherry_pic);
fruitList.add(cherry);
Fruit mango = new Fruit("Mango", R.drawable.mango_pic);
fruitList.add(mango);
}
}
子项布局文件
fruit_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/fruit_name"
android:layout_gravity="center"
android:layout_marginLeft="10dip"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
这样我们最基本的ListView的实现方式就已经完成了。重点掌握住适配器的用法,就可以轻松实现ListView的显示。