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

本文转载自: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文件

[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. <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 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. <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 plain copy

  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. }

效果图

时间: 2024-12-28 23:44:44

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

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

原文网址: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

Android -- 重写BaseAdapter以及对ListView的优化

背景 对于ListView.GridView.Gallery.Spinner等等,它是它们的适配器,直接继承自接口类Adapter的,使用BaseAdapter时需要重写很多方法,其中最重要的当属getView,因为这会涉及到ListView优化等问题,BaseAdapter与其他Adapter有些不一样,其他的Adapter可以直接在其构造方法中进行数据的设置: SimpleAdapter adapter = new SimpleAdapter(this, getData(), R.layou

Android课程设计第四天ListView运用

注意:课程设计只为完成任务,不做细节描述~ 效果图 1 <?xml version="1.0" encoding="utf-8"?> 2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 4 xmlns:tools="http://schemas.android.com/tools" 5 android:l

android 自定义adapter和线程结合 + ListView中按钮滑动后状态丢失解决办法

adapter+线程 1.很多时候自定义adapter的数据都是来源于服务器的,所以在获取服务器的时候就需要异步获取,这里就需要开线程了(线程池)去获取服务器的数据了.但这样有的时候adapter的中没有数据. 如下面的代码: 这就是在initData中异步获取服务器的数据,然后实例化adatper,再将adapter赋给listView. 2.initData()中的代码是: 这里线程要睡眠5秒钟,是为了模仿网络的耗时操作 3.Handler: 在Handler中接收到数据后给list赋值后,

android中Baseadapter的 getItem 和 getItemId 的作用和重写

重写Baseadapter时,我们知道需要重写以下四个方法:getCount,getItem(int position),getItemId(int position),getView方法, getCount决定了listview一共有多少个item,而getView返回了每个item项所显示的view. 可是getItem(int position),getItemId(int position)有什么作用呢?该怎么重写呢? 首先看 getItem: @Override public Obje

Android 使用NineOldAndroids实现仿微信listview左滑出现删除itembutton

这是一个使用NineOldAndroids实现仿微信listview左滑出现删除itembutton效果.使用的是Jake Wharton的动画开源库NineOldAndroids.在API3.0(Honeycomb), SDK新增了一个android.animation包,里面的类是实现动画效果相关的类,通过Honeycomb API,能够实现非常复杂的动画效果,但是如果开发者想在3.0以下使用这一套API, 则需要使用开源框架Nine Old Androids,在这个库中会根据我们运行的机器

[Android]对BaseAdapter中ViewHolder编写简化(转)

来自博客:http://www.cnblogs.com/tiantianbyconan/p/3642849.html 在Android项目中,经常都会用到ListView这个控件,而相应的Adapter中getView()方法的编写有一个标准的形式,如下: 1 @Override 2 public View getView(int position, View convertView, ViewGroup parent) { 3 ViewHolder holder; 4 if(null == c

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

1.listview 中的条目要用 Volley 中的 NetworkImageView,如果直接用ImageView也可以,但是要在getView方法中使用url地址设置为imageView的tag标记 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" a

Android 学习笔记(9)—— ListView

作者:夏至  欢迎转载,也请保留这段申明,谢谢 ListView绝对可以称得上是Android中最常用的UI空间之一,同时也是跟之前难度.几乎所有的应用程序都会应用到它.当我们的程序中有大量的数九需要展示的时候,就可以借助ListView来实现.我们最常用的就是手机设置那里啦. 是不是很熟悉,这里既有图片又有文字.是不是比我们以前学的有意思多无聊? 不过在实践这个功能之前呢,我们先来了解一下Adapter适配器的意思. 1.Adapter 适配器 可以这样简单理解MAC . Model(数据)-