Android使用BaseAdapter实现复杂的ListView

【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函数   (从参数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="https://www.songbingjia.com/android/@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.                 mData  =  getData(); //为刚才的变量赋值   
  34.                 MyAdapter  adapter  =  new  MyAdapter(this); //创建一个适配器   
  35.                    
  36.                 listView  =  (ListView)  findViewById(R.id.listView1); //实例化ListView   
  37.                 listView.setAdapter(adapter); //为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.                         convertView  =  mInflater.inflate(R.layout.friend_list_item,  null); //根据布局文件实例化view   
  67.                         TextView  title  =  (TextView)  convertView.findViewById(R.id.title); //找某个控件   
  68.                         title.setText(mData.get(position).get("title").toString()); //给该控件设置数据(数据从集合类中来)   
  69.                         TextView  time  =  (TextView)  convertView.findViewById(R.id.time); //找某个控件   
  70.                         time.setText(mData.get(position).get("time").toString()); //给该控件设置数据(数据从集合类中来)   
  71.                         TextView  info  =  (TextView)  convertView.findViewById(R.id.info);    
  72.                         info.setText(mData.get(position).get("info").toString());    
  73.                         img  =  (ImageView)  convertView.findViewById(R.id.img);    
  74.                         img.setBackgroundResource((Integer)  mData.get(position).get("img"));    
  75.                         return  convertView;    
  76.                 }   
  77.         }   
  78.         //  初始化一个List   
  79.         private  List< HashMap< String,  Object> >   getData()  {   
  80.                 //  新建一个集合类,用于存放多条数据   
  81.                 ArrayList< HashMap< String,  Object> >   list  =  new  ArrayList< HashMap< String,  Object> > ();    
  82.                 HashMap< String,  Object>   map  =  null;    
  83.                 for  (int  i  =  1;   i  < =  40;   i++)  {   
  84.                         map  =  new  HashMap< String,  Object> ();    
  85.                         map.put("title",  "人物"  +  i);    
  86.                         map.put("time",  "9月20日");    
  87.                         map.put("info",  "我通过了你的好友验证请求");    
  88.                         map.put("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

文章图片


    推荐阅读