ListView的三种适配器

1、ArrayAdapter:只可以简单的显示一行文本

2、SimapleAdapter:simpleAdapter的扩展性最好,可以定义各种各样的布局出来,可以放上ImageView(图片)等。可以显示比较复杂的列表,包括每行显示图片、文字等,但不能对列表进行后期加工(在java代码中加工).使用simpleAdapter的数据用一般都是HashMap构成的List,list的每一节对应ListView的每一行。HashMap的每个键值数据映射到布局文件中对应id的组件上。因为系统没有对应的布局文件可用,我们可以自己定义一个布局imagelayout.xml

第一个参数 表示访问整个android应用程序接口,基本上所有的组件都需要
 第二个参数表示生成一个Map(String ,Object)列表选项
 第三个参数表示界面布局的id  表示该文件作为列表项的组件
 第四个参数表示该Map对象的哪些key对应value来生成列表项
 第五个参数表示来填充的组件 Map对象key对应的资源一依次填充组件 顺序有对应关系

SimpleAdapter adpter=new SimpleAdapter(this,getData(),R.layout.imagelayout,new String[]{"title","info","img"},new int[]{R.id.title,R.id.info,R.id.img})private List<Map<String, Object>> getData() {

           List<Map<String, Object>> mList = new ArrayList<Map<String, Object>>();    
           Map<String, Object> map = new HashMap<String, Object>();
           map.put("title", "tp");
           map.put("info", "fb");
           map.put("img", R.drawable.icon);
           mList.add(map);
    
           map = new HashMap<String, Object>();
           map.put("title", "tp2");
           map.put("info", "fb2");
           map.put("img", R.drawable.icon2);
           mList.add(map);            
           return mList;
}

3、BaseAdapter:实现复杂的列表布局,由于BaseAdapter是一个抽象类,使用该类需要自己写一个适配器继承该类,正是由于继承了该类,需要我们重写一些方法,让我们可以在代码里控制列表的样式,更加灵活(ArrayList自定义适配器类似的用法)。

  1. public class MyBaseAdapter extends BaseAdapter {  
  2.     private List<Person> persons;  
  3.     Context context;  
  4.       
  5.     public MyBaseAdapter(Context context,List<Person> persons){  
  6.         this.persons = persons;  
  7.         this.context = context;  
  8.     }  
  9.   
  10.     @Override  
  11.     public int getCount() {  
  12.         return (persons==null)?0:persons.size();  
  13.     }  
  14.   
  15.     @Override  
  16.     public Object getItem(int position) {  
  17.         return persons.get(position);  
  18.     }  
  19.   
  20.     @Override  
  21.     public long getItemId(int position) {  
  22.         return position;  
  23.     }  
  24.       
  25.       
  26.     public class ViewHolder{  
  27.         TextView textViewItem01;  
  28.         TextView textViewItem02;  
  29.         TextView textViewItem03;  
  30.         ImageView imageView;  
  31.     }  
  32.   
  33.     @Override  
  34.     public View getView(int position, View convertView, ViewGroup parent) {  
  35.         final Person person = (Person)getItem(position);  
  36.         ViewHolder viewHolder = null;  
  37.         if(convertView==null){  
  38.             Log.d("MyBaseAdapter", "新建convertView,position="+position);  
  39.             convertView = LayoutInflater.from(context).inflate(  
  40.                     R.layout.list_view01_item, null);  
  41.               
  42.             viewHolder = new ViewHolder();  
  43.             viewHolder.textViewItem01 = (TextView)convertView.findViewById(  
  44.                     R.id.listView01Item01);  
  45.             viewHolder.textViewItem02 = (TextView)convertView.findViewById(  
  46.                     R.id.listView01Item02);  
  47.             viewHolder.textViewItem03 = (TextView)convertView.findViewById(  
  48.                     R.id.listView01Item03);  
  49.               
  50.             //动态增加1个ImageView  
  51.             viewHolder.imageView = new ImageView(context);  
  52.             LinearLayout.LayoutParams mParams = new LinearLayout.LayoutParams(  
  53.                     LinearLayout.LayoutParams.WRAP_CONTENT,  
  54.                     LinearLayout.LayoutParams.WRAP_CONTENT);  
  55.             mParams.gravity = Gravity.CENTER;  
  56.             mParams.width=50;  
  57.             viewHolder.imageView.setLayoutParams(mParams);  
  58.             //这个ImageView放到ListView的第2列之后  
  59.             ((LinearLayout)convertView).addView(viewHolder.imageView,2);  
  60.               
  61.             convertView.setTag(viewHolder);  
  62.         }else{  
  63.             viewHolder = (ViewHolder)convertView.getTag();  
  64.             Log.d("MyBaseAdapter", "旧的convertView,position="+position);  
  65.         }  
  66.           
  67.         viewHolder.textViewItem01.setText(String.valueOf(person.id));  
  68.         viewHolder.textViewItem02.setText(person.name);  
  69.         viewHolder.textViewItem03.setText(person.address);  
  70.         viewHolder.imageView.setImageResource(person.photo);  
  71.           
  72.         //对ListView中第1个TextView配置OnClick事件  
  73.         viewHolder.textViewItem01.setOnClickListener(new OnClickListener(){  
  74.             @Override  
  75.             public void onClick(View v) {  
  76.                 Toast.makeText(context,   
  77.                         "[textViewItem01.setOnClickListener]点击了"+person.name,   
  78.                         Toast.LENGTH_SHORT).show();  
  79.             }  
  80.         });  
  81.           
  82.         //对ListView中的每一行信息配置OnClick事件  
  83.         convertView.setOnClickListener(new OnClickListener(){  
  84.   
  85.             @Override  
  86.             public void onClick(View v) {  
  87.                 Toast.makeText(context,   
  88.                         "[convertView.setOnClickListener]点击了"+person.name,   
  89.                         Toast.LENGTH_SHORT).show();  
  90.             }  
  91.               
  92.         });  
  93.           
  94.         //对ListView中的每一行信息配置OnLongClick事件  
  95.         convertView.setOnLongClickListener(new OnLongClickListener(){  
  96.             @Override  
  97.             public boolean onLongClick(View v) {  
  98.                 Toast.makeText(context,   
  99.                         "[convertView.setOnLongClickListener]点击了"+person.name,   
  100.                         Toast.LENGTH_SHORT).show();  
  101.                 return true;  
  102.             }  
  103.         });  
  104.           
  105.         return convertView;  
  106.     }  
  107.   
  108. }  
posted @ 2016-09-26 21:53  wmcjda  阅读(1192)  评论(0编辑  收藏  举报