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