转自:http://blog.csdn.net/xiaobo68688/article/details/6386645
ListActivity
ListActivity中比较复杂的部分就是配置其Adapter,Adapter常用的有ArrayAdapter和SimpleAdapter。
首先我们先看一下简单的ArrayAdapter:ListActivity不同于普通Activity的地方是该Activity里边有一个ListView,该ListView绑定了Adapter中的数据。在这个示例中,该ListView绑定了包含三个元素的ArrayList,这三个元素分别是”1, 2, 3”。
主要代码:
首先我们需要让我们的类继承于ListActivity
pubic class ListActivityTest extends ListActivity { ….. }
public class ListActivityTest extends ListActivity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setTheme(android.R.style.Theme_Black); // setContentView(R.layout.main); List items = fillArray(); ArrayAdapter adapter = new ArrayAdapter( this, android.R.layout.simple_expandable_list_item_1, items); this.setListAdapter(adapter); } private List fillArray() { List items = new ArrayList(); items.add("1"); items.add("2"); items.add("3"); return items; } }
fillArray()返回了一个有三个String对象的List集合,我们在后边用来绑定ListView显示的内容。
然后我们需要在类中的onCreate()函数里边添加如下内容:
List items = this.getData(); // 获得待绑定的集合
ArrayAdapter adapter = new ArrayAdapter(
this, android.R.layout.simple_expandable_list_item_1,
items);
this.setListAdapter(adapter);
其中:this代表当前的Context;android.R.layout.simple_expandable_list_item_1代表一个包含ListView的layout的ID,系统自带了几种,我们在这里选择的是系统自带的;items表示被绑定的数据源。
OK,简单的看完我们就可以看复杂一点的SimpleAdapter:
我们还是先来看一下效果:
先上代码:
public class ListActivitySimpleDemo extends ListActivity{ /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); List<Map<String,String>> listContent = this.getData(); SimpleAdapter adapter = new SimpleAdapter(this, listContent, android.R.layout.simple_list_item_2, new String[] {"Name", "Address"}, new int[] {android.R.id.text1, android.R.id.text2}); setListAdapter(adapter); } private List<Map<String,String>> getData() { List<Map<String, String>> listContent = new ArrayList<Map<String, String>>(); Map<String, String> table1 = new HashMap<String, String>(); table1.put("Name", "XiaoCui"); table1.put("Address", "China"); listContent.add(table1); Map<String, String> table2 = new HashMap<String, String>(); table2.put("Name", "HuaHua"); table2.put("Address", "QingDao"); listContent.add(table2); return listContent; } }
讲解:
SimpleAdapter可以实现比ArrayAdapter更加复杂的ListView界面,我们这个程序实现的是一项中有两行文字的ListView。
其中的getData()函数返回的是一个List,这个不懂的朋友请查阅相关的Java基础资料。在onCreate()函数中构造了一个SimpleAdapter(),我们看一下SimpleAdapter()的构造函数:
SimpleAdapter(Context context, List> data, int resource, String[] from, int[] to)
其中:
context : 当前的环境上下文,一般直接传递this就OK
Data:数据源,我们之前构造的listContent就是该ListView的数据源
resource:layout模板资源,我们可以传递Android自带的,当然也可以自定义,我们在这里为了简单传递的是Android自带的
from和to:这个我们需要联合起来看,这两个是平行数组,也就是数组的大小相同,根据我们的例子,我们需要在android.R.id.text1中显示数据源中索引为”name”的项,在android.R.id.text2种显示索引为”address”的项。