ListView是Android软件开发中非常重要组件之一,基本上是个软件基本都会使用ListView.ListView通常有两个职责。
(1)将数据填充到布局。
(2)处理用户的选择点击等操作。
第一点很好理解,ListView就是实现这个功能的。
第二点也不难做到,比较简单。
一个ListView的创建需要3个元素。
(1)ListView中的每一列的View。
(2)填入View的数据或者图片等。
(3)连接数据与ListView的适配器。
也就是说,要使用ListView,首先要了解什么是适配器。适配器是一个连接数据和AdapterView(ListView就是一个典型的AdapterView,后面还会学习其他的)的桥梁,通过它能有效地实现数据与AdapterView的分离设置,使AdapterView与数据的绑定更加简便,修改更加方便。Android中提供了很多的Adapter,主要如下:
SimpleAdapter 用来绑定在xml中定义的控件对应的数据
SimpleCursorAdapter 用来绑定游标得到的数据
BaseAdapter 通用的基础适配器
一个简单的创建ListView的步骤:
1)创建数据集,一般定义如下
private List<Map<String, Object>> listItems;
元素添加方式:
Map<String, Object> map = new HashMap<String, Object>();
map.put("image", imgeIDs[i]); //图片资源
map.put("title", "物品名称:"); //物品标题
map.put("info", goodsNames[i]); //物品名称
map.put("detail", goodsDetails[i]); //物品详情
listItems.add(map); //添加一项
2)创建适配器
public class ListViewAdapter extends BaseAdapter{........} //自定义的适配器一般继承BaseAdapter类
listViewAdapter = new ListViewAdapter(this, listItems);
3)给ListView设置适配器
listView.setAdapter(listViewAdapter);
4)这里还有个关键点,如何把list_item.xml布局作为一个视图,添加到listView中:
LayoutInflater listContainer; //视图容器工厂
listContainer = LayoutInflater.from(context); //创建视图容器工厂并设置上下文
convertView = listContainer.inflate(R.layout.list_item, null); //创建list_item.xml布局文件的视图
下面是一个简单的例子:
MainActivity.java:
package cn.llbb.testlistview1;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.*;
import android.widget.*;
import android.widget.AdapterView.OnItemClickListener;
import java.util.*;
public class MainActivity extends ActionBarActivity {
private ListView list = null;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
list = (ListView) findViewById(R.id.listView1);
List<HashMap<String,Object>> listitem= new ArrayList<HashMap<String,Object>>();
for(int i = 1 ; i <= 10; i++){
HashMap<String, Object> item = new HashMap<String,Object>();
item.put("itemImage", R.drawable.ic_launcher);
item.put("itemTitle", "这是第" + i + "行");
item.put("itmeContent", "这是第" + i + "行的内容");
listitem.add(item);
}
SimpleAdapter msimpleadapter = new SimpleAdapter(MainActivity.this, listitem, R.layout.item,
new String[]{"itemImage","itemTitle","itmeContent"},
new int[]{R.id.itemImage,R.id.itemTitle,R.id.itemContext});
list.setAdapter(msimpleadapter);
list.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
setTitle("第" + (position + 1) + "行");
}
});
}
}
activity_main.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:android1="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<ListView
android1:id="@+id/listView1"
android1:layout_width="match_parent"
android1:layout_height="wrap_content" >
</ListView>
</LinearLayout>
item.xml:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="?android:attr/listPreferredItemHeight">
<ImageView android:id="@+id/itemImage"
android:layout_width="wrap_content" android:layout_height="fill_parent"
android:layout_alignParentTop="true" android:layout_alignParentBottom="true"
android:adjustViewBounds="true"
android:padding="2dip" />
<TextView android:id="@+id/itemTitle"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_toRightOf="@+id/itemImage"
android:layout_alignParentRight="true" android:layout_alignParentTop="true"
android:layout_above="@+id/itemContext"
android:layout_alignWithParentIfMissing="true" android:gravity="center_vertical"
android:textSize="15sp" />
<TextView android:id="@+id/itemContext"
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:layout_toRightOf="@+id/itemImage"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true" android:singleLine="true"
android:ellipsize="marquee"
android:textSize="20sp" />
</RelativeLayout>本文出自 “leboit” 博客,谢绝转载!
原文:http://leboit.blog.51cto.com/1465210/1688817