步骤

使用BaseAdapter实现复杂的ListView的步骤:

1. 数据你要准备好 List getData()。

2. 继承ListActivity专有屏,不再需要setContentView(xxx)。 

3. 创建一个继承自BaseAdapter的类。

4. 为List绑定适配器 setListAdapter(adapter)。

5. 用传统的方式来覆写适配器的getView函数  (从参数convertView里映射布局文件,find各个控件填充数据)。

6. 改写:加入ViewHolder类(定义n个控件的声明) 。  用convertView.setTag(viewHolder)在View和Object之间进行关联.。

7. 给按钮注册点击监听器。可以用Toast或AlertDialogue弹出选择项的数据。

 

friend_list.xml文件

 

[html] ​​view plain​​​ ​​copy​​


1. <?xml version="1.0" encoding="utf-8"?>
2. <!-- 这是范例ListView的布局文件,出了ListView,还可以放置其他控件 -->
3. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
4. android:layout_width="match_parent"
5. android:layout_height="fill_parent"
6. android:background="#fff"
7. android:orientation="vertical" >
8. <TextView
9. android:id="@+id/textView1"
10. android:layout_width="match_parent"
11. android:layout_height="50dp"
12. android:text="微信"
13. android:background="#2B3439"
14. android:gravity="center"
15. android:textSize="20sp"
16. android:textColor="#FFFFFF"/>
17.
18.
19.
20. <LinearLayout
21. android:layout_width="match_parent"
22. android:layout_height="wrap_content"
23. android:layout_marginLeft="18dp"
24. android:layout_marginRight="18dp"
25. android:layout_marginTop="2dp"
26. android:layout_marginBottom="2dp"
27. android:background="@drawable/btn_style_four_normal">
28. <ImageView
29. android:id="@+id/imageView1"
30. android:layout_width="wrap_content"
31. android:layout_height="wrap_content"
32. android:src="@drawable/sm_searchbtn"
33. android:layout_marginRight="10dp"/>
34. <EditText
35. android:id="@+id/editText1"
36. android:layout_width="match_parent"
37. android:layout_height="35dp"
38. android:background="@null"
39. android:ems="10" >
40. <requestFocus />
41. </EditText>
42. </LinearLayout>
43.
44. <ListView
45. android:id="@+id/listView1"
46. android:layout_width="match_parent"
47. android:paddingBottom="50dp"
48. android:cacheColorHint="#00000000"
49. android:layout_height="match_parent" >
50. </ListView>
51.
52. </LinearLayout>

friend_list_item.xml文件

 

 

[html] ​​view plain​​​ ​​copy​​


1. <?xml version="1.0" encoding="utf-8"?>
2. <!-- 这是列表项的布局文件,每一行长什么样子,修改这里 -->
3. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
4. android:layout_width="fill_parent"
5. android:layout_height="80dp"
6. android:orientation="horizontal"
7. android:padding="5dip"
8. android:paddingBottom="15dp" >
9.
10. <ImageView
11. android:id="@+id/img"
12. android:layout_width="wrap_content"
13. android:layout_height="wrap_content"
14. android:layout_margin="5dp" />
15.
16. <LinearLayout
17. android:layout_width="fill_parent"
18. android:layout_height="wrap_content"
19. android:orientation="vertical" >
20.
21. <LinearLayout
22. android:layout_width="fill_parent"
23. android:layout_height="wrap_content"
24. android:orientation="horizontal" >
25.
26. <TextView
27. android:id="@+id/title"
28. android:layout_width="wrap_content"
29. android:layout_height="wrap_content"
30. android:textColor="#000"
31. android:textSize="20sp" />
32.
33. <TextView
34. android:id="@+id/time"
35. android:layout_width="wrap_content"
36. android:layout_height="wrap_content"
37. android:layout_marginLeft="110dp"
38. android:textColor="#000"
39. android:textSize="18sp" />
40. </LinearLayout>
41.
42. <TextView
43. android:id="@+id/info"
44. android:layout_width="wrap_content"
45. android:layout_height="fill_parent"
46. android:layout_marginTop="3dp"
47. android:textColor="#000"
48. android:textSize="15sp" />
49. </LinearLayout>
50.
51. </LinearLayout>

 

WeixinActivity.java文件

 

 

[java] ​​view plain​​​ ​​copy​​


1. package com.app.weixin;
2.
3. import java.util.ArrayList;
4. import java.util.HashMap;
5. import java.util.List;
6.
7. import com.app.wexin.R;
8.
9. import android.app.Activity;
10. import android.app.AlertDialog;
11. import android.content.Context;
12. import android.content.DialogInterface;
13. import android.content.Intent;
14. import android.os.Bundle;
15. import android.view.LayoutInflater;
16. import android.view.View;
17. import android.view.ViewGroup;
18. import android.widget.BaseAdapter;
19. import android.widget.Button;
20. import android.widget.ImageView;
21. import android.widget.ListView;
22. import android.widget.TextView;
23.
24. public class WeixinActivity extends Activity {
25. private ImageView img;
26. private List<HashMap<String, Object>> mData;
27. private ListView listView;
28.
29. @Override
30. protected void onCreate(Bundle savedInstanceState) {
31. super.onCreate(savedInstanceState);
32. setContentView(R.layout.friend_list);
33. //为刚才的变量赋值
34. new MyAdapter(this);//创建一个适配器
35.
36. //实例化ListView
37. //为ListView控件绑定适配器
38. }
39.
40. /** 自定义适配器 */
41. public class MyAdapter extends BaseAdapter {
42. private LayoutInflater mInflater;// 动态布局映射
43.
44. public MyAdapter(Context context) {
45. this.mInflater = LayoutInflater.from(context);
46. }
47.
48. // 决定ListView有几行可见
49. @Override
50. public int getCount() {
51. return mData.size();// ListView的条目数
52. }
53.
54. @Override
55. public Object getItem(int arg0) {
56. return null;
57. }
58.
59. @Override
60. public long getItemId(int arg0) {
61. return 0;
62. }
63.
64. @Override
65. public View getView(int position, View convertView, ViewGroup parent) {
66. null);//根据布局文件实例化view
67. //找某个控件
68. "title").toString());//给该控件设置数据(数据从集合类中来)
69. //找某个控件
70. "time").toString());//给该控件设置数据(数据从集合类中来)
71. TextView info = (TextView) convertView.findViewById(R.id.info);
72. "info").toString());
73. img = (ImageView) convertView.findViewById(R.id.img);
74. "img"));
75. return convertView;
76. }
77. }
78. // 初始化一个List
79. private List<HashMap<String, Object>> getData() {
80. // 新建一个集合类,用于存放多条数据
81. new ArrayList<HashMap<String, Object>>();
82. null;
83. for (int i = 1; i <= 40; i++) {
84. new HashMap<String, Object>();
85. "title", "人物" + i);
86. "time", "9月20日");
87. "info", "我通过了你的好友验证请求");
88. "img", R.drawable.pic_person);
89. list.add(map);
90. }
91.
92. return list;
93. }
94. public void showInfo(int position){
95. getData();
96. }
97. }

效果图

 

【Android】使用BaseAdapter实现复杂的ListView【转】_控件

 

【Android】使用BaseAdapter实现复杂的ListView【转】_android_02