本文转载自:http://blog.csdn.net/jueblog/article/details/11857281

步骤

使用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文件

  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. <LinearLayout
  18. android:layout_width="match_parent"
  19. android:layout_height="wrap_content"
  20. android:layout_marginLeft="18dp"
  21. android:layout_marginRight="18dp"
  22. android:layout_marginTop="2dp"
  23. android:layout_marginBottom="2dp"
  24. android:background="@drawable/btn_style_four_normal">
  25. <ImageView
  26. android:id="@+id/imageView1"
  27. android:layout_width="wrap_content"
  28. android:layout_height="wrap_content"
  29. android:src="@drawable/sm_searchbtn"
  30. android:layout_marginRight="10dp"/>
  31. <EditText
  32. android:id="@+id/editText1"
  33. android:layout_width="match_parent"
  34. android:layout_height="35dp"
  35. android:background="@null"
  36. android:ems="10" >
  37. <requestFocus />
  38. </EditText>
  39. </LinearLayout>
  40. <ListView
  41. android:id="@+id/listView1"
  42. android:layout_width="match_parent"
  43. android:paddingBottom="50dp"
  44. android:cacheColorHint="#00000000"
  45. android:layout_height="match_parent" >
  46. </ListView>
  47. </LinearLayout>

friend_list_item.xml文件

  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. <ImageView
  10. android:id="@+id/img"
  11. android:layout_width="wrap_content"
  12. android:layout_height="wrap_content"
  13. android:layout_margin="5dp" />
  14. <LinearLayout
  15. android:layout_width="fill_parent"
  16. android:layout_height="wrap_content"
  17. android:orientation="vertical" >
  18. <LinearLayout
  19. android:layout_width="fill_parent"
  20. android:layout_height="wrap_content"
  21. android:orientation="horizontal" >
  22. <TextView
  23. android:id="@+id/title"
  24. android:layout_width="wrap_content"
  25. android:layout_height="wrap_content"
  26. android:textColor="#000"
  27. android:textSize="20sp" />
  28. <TextView
  29. android:id="@+id/time"
  30. android:layout_width="wrap_content"
  31. android:layout_height="wrap_content"
  32. android:layout_marginLeft="110dp"
  33. android:textColor="#000"
  34. android:textSize="18sp" />
  35. </LinearLayout>
  36. <TextView
  37. android:id="@+id/info"
  38. android:layout_width="wrap_content"
  39. android:layout_height="fill_parent"
  40. android:layout_marginTop="3dp"
  41. android:textColor="#000"
  42. android:textSize="15sp" />
  43. </LinearLayout>
  44. </LinearLayout>

WeixinActivity.java文件

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

效果图

【Android】使用BaseAdapter实现复杂的ListView【转】的更多相关文章

  1. 【Android】以BaseAdapter做适配器的ListView及其性能优化

    适配器的Java类 package com.app.adapter; import org.json.JSONArray; import org.json.JSONObject; import and ...

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

    原文网址:http://blog.csdn.net/jueblog/article/details/11857281 使用BaseAdapter实现复杂的ListView的步骤: 1. 数据你要准备好 ...

  3. 【Android】使用BaseAdapter实现复杂的ListView

    步骤 使用BaseAdapter实现复杂的ListView的步骤: 1. 数据你要准备好 List getData(). 2. 继承ListActivity专有屏,不再需要setContentView ...

  4. Android笔记——BaseAdapter的使用

    Android中的适配器(Adapter)是数据与视图(View)之间的桥梁,用于对要显示的数据进行处理,并通过绑定到组件进行数据的显示. BaseAdapter是Android应用程序中经常用到的基 ...

  5. Android之使用Volley框架在ListView中加载大量图片

    1.listview 中的条目要用 Volley 中的 NetworkImageView,如果直接用ImageView也可以,但是要在getView方法中使用url地址设置为imageView的tag ...

  6. android ArrayAdapter BaseAdapter SimpleAdapter使用讲解

    不是我针对谁,我只想针对新手玩家. 不清楚Adapter作用的可以看一下http://www.cnblogs.com/zhichaobouke/p/5798672.html (括号里的内容都是我主观添 ...

  7. android 应用架构随笔三(ListView)

    import java.util.ArrayList; import java.util.List; import com.heima.googleplay.holder.BaseHolder; im ...

  8. android 项目学习随笔十七(ListView、GridView显示组图)

    ListView.GridView显示组图,处理机制相同 <?xml version="1.0" encoding="utf-8"?> <Li ...

  9. android 项目学习随笔十三(ListView实现ITEM点击事件,将已读状态持久化到本地)

    1.因为给LISTVIEW增加了两个头布局,所以在点击事件ITEM索引会增加2,比如原来第一条数据的索引应该为0,增加两个头布局后,它的索引变为        2,为了使LISTVIEW的ITEM在点 ...

随机推荐

  1. HTTP/2探索第二篇——工具及应用

    版权声明:本文由张浩然原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/88 来源:腾云阁 https://www.qclou ...

  2. change事件的兼容性问题

    当input的value被修改时,在没有失去焦点的情况下,无法触发change事件,但是可以触发propertychange事件. 但是propertychange事件存在兼容性问题: IE9以下支持 ...

  3. linux awk时间计算脚本

    在linux如果计划时间是个麻烦事, 用awk脚本如下 BEGIN {FS=":";OFS=":"} {total_seconds=total_seconds+ ...

  4. Intellij IDEA同时打开多个项目

    extends:http://www.kaifazhe.me/java/99.html 使用eclipse习惯的同学知道是可以同时多个项目查看的,只需要import就可以了,但Intellij IDE ...

  5. 百度地图api定位和导航简写

    function locate() { // 百度地图API功能 var map = new BMap.Map("allmap"); // 创建Map实例 var point = ...

  6. Mybatis框架插件PageHelper的使用

    在web开发过程中涉及到表格时,例如dataTable,就会产生分页的需求,通常我们将分页方式分为两种:前端分页和后端分页. 前端分页 一次性请求数据表格中的所有记录(ajax),然后在前端缓存并且计 ...

  7. [Gradle] 获取 gradle 命令行参数

    project.gradle.startParameter 参考 StartParameter | Gradle API 4.9

  8. 用Squid实现反向代理

    Last-Modified: 告诉反向代理页面什么时间被修改 Expires: 告诉反向代理页面什么时间应该从缓冲区中删除 Cache-Control: 告诉反向代理页面是否应该被缓冲 Pragma: ...

  9. Python开发【Django】:模板语言

    排序 1.forloop.counter 表示循环的次数,它从1开始计数,第一次循环设为1 {% for item in todo_list %} <p>{{ forloop.counte ...

  10. django-base

    1.django创建 2.django常用命令 3.django配置 一.创建django程序 1.终端:django-admin startproject sitename 2.IDE创建Djang ...