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