zoukankan      html  css  js  c++  java
  • 5.2 Adapter

    1 ArrayAdapter

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

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(  
                                       this,  
                                       R.layout.item, //只能有一个定义了id的TextView  
                                       data); //data既可以是数组,也可以是List集合  

    2 SimpleAdapter

    可以显示比较复杂的列表,包括每行显示图片、文字等,但不能对列表进行后期加工,也是只是单纯的负责显示(当然可以设计复杂点的布局来显示复杂列表),例如,每行显示不同背景等。

    List<Map<String,Object>> mData= new ArrayList<Map<String,Object>>();;  
    for(int i =0; i < lengh; i++) {      
        Map<String,Object> item = new HashMap<String,Object>();      
        item.put("image", R.drawable.portrait);      
        item.put("title", mListTitle[i]);      
        item.put("text", mListStr[i]);      
        mData.add(item);       
    }      
    SimpleAdapter adapter = new SimpleAdapter(  
                    this,  
                    mData,        //Map 列表选项
                    R.layout.item,   //item布局   
                    new String[]{"image","title","text"},       // Map对象中的key
                    new int[]{R.id.image, R.id.title, R.id.text});  // item 布局中的 控件id

    在ListActivity的onCreate()中:setListAdapter(adapter);   //ListActivity不用setContentView()

    3 BaseAdapter

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

        public class MyBaseAdapter extends BaseAdapter{  
                private LayoutInflater mInflater;  
               public MyAdapter(Context context){  
              this.mInflater = LayoutInflater.from(context);
           } @Override        
    public int getCount() { return mData.size(); } public Object getItem(int arg0) { return null; } public long getItemId(int arg0) { return 0; } public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; if (convertView == null) { holder = new ViewHolder(); convertView = mInflater.inflate(R.layout.vlist2, null); holder.info = (TextView)convertView.findViewById(R.id.info); convertView.setTag(holder); // 为之后get做准备 }else //重复利用,以节省内存 holder = (ViewHolder)convertView.getTag(); holder.info.setText((String)mData.get(position).get("info")); return convertView; }    public final class ViewHolder{ // 内部类   public TextView info;        }    }

    public class MyBaseAdapter extends BaseAdapter

              private LayoutInflater mInflater

              public MyAdapter(Context context){  this.mInflater = LayoutInflater.from(context);  } 

                @Override 

    public int getCount() {  return mData.size();  } 

                public Object getItem(int arg0) {  return null;  } 

                public long getItemId(int arg0) { return 0;    } 

                public View getView(int position, View convertView, ViewGroup parent) { 

                    ViewHolder holder = null; 

                    if (convertView == null) { 

                        holder = new ViewHolder();  

                        convertView = mInflater.inflate(R.layout.vlist2, null);  

                        holder.info = (TextView)convertView.findViewById(R.id.info); 

                        convertView.setTag(holder);  // 为之后get做准备

                    }else    //重复利用,以节省内存

                        holder = (ViewHolder)convertView.getTag();  

                    holder.info.setText((String)mData.get(position).get("info"));   

                    return convertView; 

                } 

          public final class ViewHolder{   // 内部类

                public TextView info; 

    }

    }

  • 相关阅读:
    [React Hooks长文总结系列三]为所欲为,制作“穷人版”的redux
    [React Hooks长文总结系列二]渐入佳境,性能调优与自定义钩子
    [React Hooks长文总结系列一]初出茅庐,状态与副作用
    EsModule VS CommonJS
    [清代八股文]Promise如何实现串行执行
    React Fiber基本工作原理
    深入剖析setState同步异步机制
    破译《碟中谍》经典画面,解密指纹验证+刷脸!
    如何测试重签名的应用功能是否正常
    图像处理之滤镜、图文排版的开发详解,从入门到起飞
  • 原文地址:https://www.cnblogs.com/keyarchen/p/6062895.html
Copyright © 2011-2022 走看看