ListView是android中一系列组件之一,它以垂直列表的方式列出所需要的列表项.实现方式很简单,主要有两种:

第一种:当前的Activity继承自ListActivity

第二种:使用ListView组件,在layout里面定义声明

ListView的使用是需要绑定数据源的,一般情况下有三种数据源比较常用,分别是:ArrayAdapter、SimpleAdapter、SimpleCursorAdapter.

需要注意的就是:SimpleCursorAdapter使用的时候是需要数据库作为数据源的情况下才能使用.

在sdk文档中是怎样描述ListView的呢?

From SDK Description:A view that shows items in a vertically scrolling list. The items come from the ListAdapter associated with this view.

我在我的其他博客当中也总结了些关于ListView的知识点:http://jackxlee.blog.51cto.com/2493058/684428

现在就三种不同的数据源给大家介绍一下ListView的使用:

首先,新建一个Android项目,主界面有三个Button,每一个Button可以跳转到不同数据源的ListView,并在三个不同的Activity上显示出来

我先把MainActivity的代码贴出来给大家看看:

 1 public class MainActivity extends Activity implements OnClickListener{
2 private Button btnArray,btnSimple,btnSimpleCursor;
3 /** Called when the activity is first created. */
4 @Override
5 public void onCreate(Bundle savedInstanceState) {
6 super.onCreate(savedInstanceState);
7 setContentView(R.layout.main);
8
9 getWidgetInstance();
10
11 btnArray.setOnClickListener(this);
12 btnSimple.setOnClickListener(this);
13 btnSimpleCursor.setOnClickListener(this);
14 }
15
16 public void getWidgetInstance() {
17 btnArray = (Button)findViewById(R.id.btnArray);
18 btnSimple = (Button)findViewById(R.id.btnSimple);
19 btnSimpleCursor = (Button)findViewById(R.id.btnSimpleCursor);
20 }
21
22 @Override
23 public void onClick(View v) {
24 int id = v.getId();
25 switch(id) {
26 case R.id.btnArray:
27 Intent intent_array = new Intent(MainActivity.this,ArrayAdapterActivity.class);
28 MainActivity.this.startActivity(intent_array);
29 break;
30 case R.id.btnSimple:
31 Intent intent_simple = new Intent(MainActivity.this,SimpleAdapterActivity.class);
32 MainActivity.this.startActivity(intent_simple);
33 break;
34 case R.id.btnSimpleCursor:
35 Intent intent_cursor = new Intent(MainActivity.this,SimpleCursorAdapterActivity.class);
36 MainActivity.this.startActivity(intent_cursor);
37 break;
38 }
39 }
40 }

main.xml的布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation
="vertical"
android:layout_width
="fill_parent"
android:layout_height
="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height
="wrap_content"
android:text
="ListView使用示例"
android:gravity
="center"
android:textColor
="#EEE"
android:textStyle
="bold"
android:textSize
="25sp"
/>
<Button
android:id="@+id/btnArray"
android:layout_width
="wrap_content"
android:layout_height
="wrap_content"
android:text
="show ArrayAdapter"
/>
<Button
android:id="@+id/btnSimple"
android:layout_width
="wrap_content"
android:layout_height
="wrap_content"
android:text
="show SimpleAdapter"
/>
<Button
android:id="@+id/btnSimpleCursor"
android:layout_width
="wrap_content"
android:layout_height
="wrap_content"
android:text
="show SimpleCursorAdapter"
/>
</LinearLayout>

主界面示意图如下:

接下来就是介绍三种不同数据源的ListView的Activity的显示了.

#1.ArrayAdapter

ArrayAdapter是三种数据源中最简单的Adapter,只能显示一行文字.

 1 public class ArrayAdapterActivity extends ListActivity {
2 @Override
3 public void onCreate(Bundle savedInstanceState) {
4 super.onCreate(savedInstanceState);
5 //列表项的数据
6 String[] strs = {"1","2","3","4","5"};
7 ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_expandable_list_item_1,strs);
8 setListAdapter(adapter);
9 }
10 }

运行结果:

#2.SimpleAdapterActivity

SimpleAdapterActivity需要自定义每一项显示的布局方式:simple.xml的代码如下

 1 <?xml version="1.0" encoding="utf-8"?>
2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 android:orientation="vertical"
4 android:layout_width="fill_parent"
5 android:layout_height="fill_parent"
6 >
7 <ImageView
8 android:id="@+id/img"
9 android:layout_width="wrap_content"
10 android:layout_height="wrap_content"
11 android:layout_margin="5dp"
12 />
13 <TextView
14 android:id="@+id/title"
15 android:layout_width="wrap_content"
16 android:layout_height="wrap_content"
17 android:textColor="#ffffff"
18 android:textSize="20sp"
19 />
20 </LinearLayout>

SimpleAdapterActivity.java代码如下:

 1 package com.ceo.listview.activity;
2
3 import java.util.ArrayList;
4 import java.util.HashMap;
5 import java.util.List;
6 import java.util.Map;
7
8 import android.app.ListActivity;
9 import android.os.Bundle;
10 import android.widget.SimpleAdapter;
11
12 /**
13 * the DataSource is SimpleAdapter
14 */
15
16 public class SimpleAdapterActivity extends ListActivity {
17 @Override
18 public void onCreate(Bundle savedInstanceState) {
19 super.onCreate(savedInstanceState);
20
21 SimpleAdapter adapter = new SimpleAdapter(this, getData(), R.layout.simple, new String[] { "title", "img" }, new int[] { R.id.title, R.id.img });
22 setListAdapter(adapter);
23 }
24
25 private List<Map<String, Object>> getData() {
26 //map.put(参数名字,参数值)
27 List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();
28 Map<String, Object> map = new HashMap<String, Object>();
29 map.put("title", "摩托罗拉");
30 map.put("img", R.drawable.icon);
31 list.add(map);
32
33 map = new HashMap<String, Object>();
34 map.put("title", "诺基亚");
35 map.put("img", R.drawable.icon);
36 list.add(map);
37
38 map = new HashMap<String, Object>();
39 map.put("title", "三星");
40 map.put("img", R.drawable.icon);
41 list.add(map);
42 return list;
43 }
44
45 }

运行结果如下图:

#3.SimpleCursorAdapterActivity

SimpleCursorAdapterActivity的注意事项前面已经和大家介绍过了,一定要以数据库作为数据源的时候,才能使用SimpleCursorAdapterActivity.

 1 public class SimpleCursorAdapterActivity extends ListActivity {
2 @Override
3 public void onCreate(Bundle savedInstanceState) {
4 super.onCreate(savedInstanceState);
5 //获得一个指向系统通讯录数据库的Cursor对象获得数据来源
6 Cursor cur = getContentResolver().query(People.CONTENT_URI, null, null, null, null);
7 startManagingCursor(cur);
8 //实例化列表适配器
9
10 ListAdapter adapter = new SimpleCursorAdapter(this, android.R.layout.simple_list_item_1, cur, new String[] {People.NAME}, new int[] {android.R.id.text1});
11 setListAdapter(adapter);
12 }
13 }

这里特别需要注意的一点是:不要忘了在AndroidManifest.xml文件中加入权限

<uses-permission android:name="android.permission.READ_CONTACTS"></uses-permission>

至此三种不同数据源的ListView已介绍完毕.在实际开发过程中,经常会自定义Adapter使用ListView.

 

2011.10.24.pm

jack.li

QQ:523072842
Email:523072842@qq.com

posted on 2011-10-24 15:45  jack.li  阅读(325)  评论(0编辑  收藏  举报