搜索
热搜: 活动 交友 discuz
查看: 3570|回复: 0
打印 上一主题 下一主题

Android适配器之ArrayAdapter、SimpleAdapter和BaseAdapter的简单用法

[复制链接]

160

主题

165

帖子

814

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
814
跳转到指定楼层
楼主
发表于 2016-8-23 09:35:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1.ArrayAdapter



只可以简单的显示一行文本

代码片段:
  1. ArrayAdapter<String> adapter = new ArrayAdapter<String>(
  2.                 this,
  3.                 R.layout.item,//只能有一个定义了id的TextView
  4.                 data);//data既可以是数组,也可以是List集合
复制代码
2.SimpleAdapter

可以显示比较复杂的列表,包括每行显示图片、文字等,但不能对列表进行后期加工(在java代码中加工),
也是只是单纯的负责显示(当然可以设计复杂点的布局来显示复杂列表),例如,每行显示不同背景等。
代码片段:
  1. List<Map<String,Object>> mData= new ArrayList<Map<String,Object>>();;
  2. for(int i =0; i < lengh; i++) {   
  3.         Map<String,Object> item = new HashMap<String,Object>();   
  4.         item.put("image", R.drawable.portrait);   
  5.         item.put("title", mListTitle[i]);   
  6.         item.put("text", mListStr[i]);   
  7.         mData.add(item);     
  8. }   
  9. SimpleAdapter adapter = new SimpleAdapter(
  10.                                 this,
  11.                                 mData,
  12.                                 R.layout.item,   
  13.                                 new String[]{"image","title","text"},
  14.                                 new int[]{R.id.image,R.id.title,R.id.text});   
复制代码
3.BaseAdapter

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

  1. private class MyListAdapter extends BaseAdapter{  
  2.         private Context mContext;  
  3.         private int[] colors=new int[]{0xff626569,0xff4f5257 };  
  4.          public MyListAdapter(Context context){  
  5.              mContext=context;  
  6.          }  
  7.         @Override  
  8.         public int getCount() {  
  9.             // TODO Auto-generated method stub  
  10.             return mListText.length;  
  11.         }  
  12.   
  13.         @Override  
  14.         public Object getItem(int position) {  
  15.             // TODO Auto-generated method stub  
  16.             return position;  
  17.         }  
  18.   
  19.         @Override  
  20.         public long getItemId(int position) {  
  21.             // TODO Auto-generated method stub  
  22.             return position;  
  23.         }  
  24.   
  25.         @Override  
  26.         public View getView(int position, View convertView, ViewGroup parent) {  
  27.             ImageView image=null;  //这些控件可以单独封装成一个类(Holder),便与优化
  28.             TextView title=null;  
  29.             TextView  content=null;  
  30.             if(convertView==null){  
  31.                 convertView=LayoutInflater.from(mContext).inflate(R.layout.colorlist, null);  
  32.                 image=(ImageView) convertView.findViewById(R.id.color_image);  
  33.                 title=(TextView) convertView.findViewById(R.id.color_title);  
  34.                 content=(TextView) convertView.findViewById(R.id.color_text);  
  35.             }
  36.             int colorPos=position%colors.length;  
  37.             convertView.setBackgroundColor(colors[colorPos]);  
  38.             title.setText(mListTitle[position]);  
  39.             content.setText(mListText[position]);  
  40.             image.setImageResource(R.drawable.portrait);  
  41.               
  42.             return convertView;  
  43.         }  
  44.          
  45.     }  

  46. --------------------------下面样例列表页的控件单独封装成了一个类(Holder),便与优化-----


  47. public class MyBaseAdapter extends BaseAdapter{
  48.      
  49.            private LayoutInflater mInflater;
  50.             public MyAdapter(Context context){
  51.                this.mInflater = LayoutInflater.from(context);
  52.           }
  53.             @Override
  54.            public int getCount() {
  55.                 // TODO Auto-generated method stub
  56.                 return mData.size();
  57.             }
  58.      
  59.             @Override
  60.             public Object getItem(int arg0) {
  61.                 // TODO Auto-generated method stub
  62.                 return null;
  63.            }
  64.      
  65.             @Override
  66.             public long getItemId(int arg0) {
  67.                 // TODO Auto-generated method stub
  68.                 return 0;
  69.             }
  70.      
  71.             @Override
  72.             public View getView(int position, View convertView, ViewGroup parent) {
  73.                  
  74.                 ViewHolder holder = null;
  75.                 if (convertView == null) {
  76.                     holder=new ViewHolder();
  77.                     convertView = mInflater.inflate(R.layout.vlist2, null);
  78.                     holder.img = (ImageView)convertView.findViewById(R.id.img);
  79.                     holder.title = (TextView)convertView.findViewById(R.id.title);
  80.                     holder.info = (TextView)convertView.findViewById(R.id.info);
  81.                     holder.viewBtn = (Button)convertView.findViewById(R.id.view_btn);
  82.                     convertView.setTag(holder);
  83.                      
  84.                 }else {                     
  85.                     holder = (ViewHolder)convertView.getTag();
  86.                 }
  87.                 holder.img.setBackgroundResource((Integer)mData.get(position).get("img"));
  88.                 holder.title.setText((String)mData.get(position).get("title"));
  89.                 holder.info.setText((String)mData.get(position).get("info"));
  90.                                 //给每一个列表后面的按钮添加响应事件
  91.                 holder.viewBtn.setOnClickListener(new View.OnClickListener() {
  92.                     @Override
  93.                     public void onClick(View v) {
  94.                         showInfo();               
  95.                     }
  96.                 });

  97.                 return convertView;
  98.             }
  99.                 ------------
  100.             public final class ViewHolder{
  101.             public ImageView img;
  102.             public TextView title;
  103.             public TextView info;
  104.             public Button viewBtn;
  105.         }
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|安卓论坛  

GMT+8, 2024-6-26 21:30 , Processed in 0.068565 second(s), 29 queries .

Powered by Discuz! X3.2

© 2001-2013 Design S!|ƽ̶

快速回复 返回顶部 返回列表