步骤

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

[html] view plaincopy
  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文件

[java] view plaincopy
  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. }

效果图

使用BaseAdapter实现复杂的ListView相关推荐

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

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

  2. Android Listview 自定义BaseAdapter的实现及Listview优化示例

    上一篇文章中我们讲了Android Listview SimpleAdapter的使用完整示例(实现用户列表)_左眼看成爱的博客-CSDN博客 本示例实现的效果图: 每个item中的checkbox选 ...

  3. Android BaseAdapter与ListView的使用

    Android BaseAdapter与ListView的使用 定义:BaseAdapterextends Objectimplements ListAdapter SpinnerAdapter Ba ...

  4. Android的ArrayAdapter、SimpleAdapter、BaseAdapter与ListView的使用

    工程目录: MainActivity package com.example.demo_four;import androidx.appcompat.app.AppCompatActivity;imp ...

  5. ListView使用BaseAdapter与ListView的优化

    2019独角兽企业重金招聘Python工程师标准>>> 在ListView的使用中,有时候还需要在里面加入按钮等控件,实现单独的操作.也就是说,这个ListView不再只是展示数据, ...

  6. Android ListView使用BaseAdapter与ListView的优化

    在ListView的使用中,有时候还需要在里面加入按钮等控件,实现单独的操作.也就是说,这个ListView不再只是展示数据,也不仅仅是这一行要来处理用户的操作,而是里面的控件要获得用户的焦点.读者可 ...

  7. listview 滑动更改标题

    2019独角兽企业重金招聘Python工程师标准>>> package com.example.listviewtest; import java.util.ArrayList; i ...

  8. ListView、AdapterView、RecyclerView全面解析

    原文链接:http://blog.csdn.net/carson_ho/article/details/51472640 AdapterView简介 AdapterView本身是一个抽象类,Adapt ...

  9. Android listview与adapter用法

    2019独角兽企业重金招聘Python工程师标准>>> 一个ListView通常有两个职责. (1)将数据填充到布局. (2)处理用户的选择点击等操作. 第一点很好理解,ListVi ...

最新文章

  1. 如何查看某个端口被谁占用
  2. PHP Mysql类【转】
  3. 自学Zabbix3.0版本以上资产清单inventory
  4. 为什么牛在天上飞 因为有人在地上吹 谈高德地图说日活过亿
  5. 四元数相关总结-未完
  6. ab plc编程软件_三菱PLC编程程序PLC的软件编程
  7. asp.net报错“尝试读取或写入受保护的内存。这通常指示其他内存已损坏”的解决办法...
  8. Python开发【第一篇】:目录
  9. dataframe读取列表中对应的列
  10. 高德上线“家人地图”惹争议 官方回应:用户确认授权后才能使用
  11. db powerdesign CDM、LDM、PDM、OOM的区别
  12. 功放限幅保护_功放限幅电路的制作方法
  13. 英语写作神器Quillbot---如何使用免费的Premium功能
  14. Centos 7 设置静态IP地址
  15. websocket断开重连解决方案,基于子慕大诗人博客修改 健壮强化版
  16. 一梦江湖获取服务器信息卡住,一梦江湖4月10日更新了什么 副本减负再临绝境天道盟开放...
  17. 解决fidder一直报“The sever(XXX) presented a certificate that did not validate,....”
  18. 基于Unity3D的PCAndroid端2D横屏冒险类闯关游戏
  19. UniApp:Vue特性篇:vue2.0的广播与接收(待详细了解)
  20. anchor free:CornerNet解读【目标检测】

热门文章

  1. nginx 域名配置_nginx 一个域名配置多个vue项目
  2. java 成员变量的初始化_Java类变量和成员变量初始化过程
  3. pythonappend用法_python中append实例用法总结
  4. esp32 怎么分配freertos 堆栈大小_详解STM32单片机的堆栈
  5. python 视频字幕替换_利用python调整srt字幕时间轴
  6. python操作excel表格写入多行和多列_python多处理:写入同一excel-fi
  7. 2018牛客网暑期ACM多校训练营(第十场)A Rikka with Lowbit (树状数组)
  8. 45-机器设计问题(深搜)
  9. C#下的两种加密方式MD5和DEC
  10. 第一冲刺阶段工作总结02