1. Adapter接口派生了ListAdapter和SpinnerAdapter接口,ListAdapter为AbsListView提供列表项,SpinnerAdapter为AbsSpinner提供列表项,Adapter常用的实现类如下:
    • ArrayAdapter:将数组活列表中的多个值包装成列表项,每个列表项只能是TextView或者其子类
      ArrayAdapter String []arr={"悟空","八戒","牛魔王"};
       //第二个参数必须是TextView或者其子类的资源Id
       ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,R.layout.array_item,arr);
       ListView list=(ListView)findViewById(R.id.list);
       list.setAdapter(adapter);
    • SimpleAdapter:可将list集合中的多个对象包装成列表项,每个列表项对应一个Layout
      SimpleAdapter    String []names=new String[]{"虎头","弄玉","李清照","李白"};
          String []descs=new String[]{"good boy","good girl","bad boy","bad girl"};
          List<Map<String,Object>>listItems=new ArrayList<Map<String,Object>>();
          for(int i=0;i<names.length;i++) {
                  Map<String, Object> listItem = new HashMap<String, Object>();
                  listItem.put("header",R.drawable.ic_launcher);
                  listItem.put("personName", names[i]);
                  listItem.put("desc", descs[i]);
                  listItems.add(listItem);
              }
              //map的key与控件id对应
              SimpleAdapter simpleAdapter=new SimpleAdapter(this,listItems,R.layout.simple_item,new String[]{"header","personName","desc"},
                      new int[]{R.id.header,R.id.name,R.id.desc});
              ListView list1=(ListView)findViewById(R.id.list1);
              list1.setAdapter(simpleAdapter);
    • SimpleCursorAdapter:用于包装Cursor提供的数据,其构造函数为
      public SimpleAdapter(Context context,
                   List<? extends Map<String,?>> data,
                   int resource,
                   String[] from,
                   int[] to)
      SimpleCursorAdapterString[] fromColumns = new String[] {People.NUMBER, People.NAME};
      int[] toLayoutIDs = new int[] { R.id.nameTextView, R.id.numberTextView};
      SimpleCursorAdapter myAdapter = new SimpleCursorAdapter(this,R.layout.simplecursorlayout,cursor,fromColumns,toLayoutIDs);
      myListView.setAdapter(myAdapter);

    • BaseAdapter:常用来扩展,可以实现对列表项最大限度的定制.自定义BaseAdapter时要重写它的多个方法,比较重要的有getCount,getView方法.ListView设置了BaseAdapter,系统开始绘制ListView的时候,首先调用getCount方法得到ListView的item数目,然后调用getView逐条绘制item
      • View getView(int position,View convertView,ViewGroup parent):显示data set position位置的数据的view.其中convertView参数需要注意。它的工作原理是:以ListView为例,当初始显示时,每次显示一个item都调用一次getView方法,每次调用convertView都为空,当显示完后,如果屏幕移动了并且导致有些Item移出屏幕,此时如果还有新的item需要产生,调用getView时convertView参数就不为空,而是移出屏幕的item的view,所以为了提高效率可以重用之前的view,代码如下
        BaseAdapter getView    @Override  
            public View getView(int position, View convertView, ViewGroup parent)  
            {  
                Cache cache;  
                if(null==convertView)  
                {  
                    cache=new Cache();  
                    convertView=LayoutInflater.from(mContext).inflate(R.layout.textview, null); 
                    cache.textView=(TextView)convertView.findViewById(R.id.textview);  
                    convertView.setTag(cache);  
                }  
                else  
                {  
                    //复用old view
                    cache=(Cache)convertView.getTag();  
                }  
                cache.textView.setText("position: "+position);  
                 return convertView;           
            }  
           //用于缓存item的所有view,不用重复创建
            class Cache  
            {  
                public TextView textView;  
        
            }  
    • 继承关系如图所示:
      Android Adapter
posted on 2014-09-12 21:18 哨兵 阅读(...) 评论(...) 编辑 收藏

相关文章: