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

1.ArrayAdapter

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

代码片段:

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


2.SimpleAdapter

SimpleAdapter是扩展性最好的适配器,可以定义各种你想要的布局,而且使用很方便

SimpleAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to)

参数context:上下文,比如this。关联SimpleAdapter运行的视图上下文

参数data:Map列表,列表要显示的数据,这部分需要自己实现,如例子中的getData(),类型要与上面的一致,每条项目要与from中指定条目一致

参数resource:ListView单项布局文件的Id,这个布局就是你自定义的布局了,你想显示什么样子的布局都在这个布局中。这个布局中必须包括了to中定义的控件id

参数 from:一个被添加到Map上关联每一个项目列名称的列表,数组里面是列名称

参数 to:是一个int数组,数组里面的id是自定义布局中各个控件的id,需要与上面的from对应

代码片段:

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,  
                R.layout.item,      
                new String[]{"image","title","text"},  
                new int[]{R.id.image,R.id.title,R.id.text}); 



3.BaseAdapter

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

代码片段:

private class MyListAdapter extends BaseAdapter{    
        private Context mContext;    
        private int[] colors=new int[]{0xff626569,0xff4f5257 };    
         public MyListAdapter(Context context){    
             mContext=context;    
         }    
        @Override    
        public int getCount() {    
            // TODO Auto-generated method stub    
            return mListText.length;    
        }    
    
        @Override    
        public Object getItem(int position) {    
            // TODO Auto-generated method stub    
            return position;    
        }    
    
        @Override    
        public long getItemId(int position) {    
            // TODO Auto-generated method stub    
            return position;    
        }    
    
        @Override    
        public View getView(int position, View convertView, ViewGroup parent) {    
            ImageView image=null;  //这些控件可以单独封装成一个类(Holder),便于优化  
            TextView title=null;    
            TextView  content=null;    
            if(convertView==null){    
                convertView=LayoutInflater.from(mContext).inflate(R.layout.colorlist, null);    
                image=(ImageView) convertView.findViewById(R.id.color_image);    
                title=(TextView) convertView.findViewById(R.id.color_title);    
                content=(TextView) convertView.findViewById(R.id.color_text);    
            }   
            int colorPos=position%colors.length;    
            convertView.setBackgroundColor(colors[colorPos]);    
            title.setText(mListTitle[position]);    
            content.setText(mListText[position]);    
            image.setImageResource(R.drawable.portrait);    
                
            return convertView;    
        }    
            
    }    
  
--------------------------下面样例列表页的控件单独封装成了一个类(Holder),便与优化-----  
  
  
 public class MyBaseAdapter extends BaseAdapter{  
       
           private LayoutInflater mInflater;  
            public MyAdapter(Context context){  
               this.mInflater = LayoutInflater.from(context);  
          }  
            @Override  
           public int getCount() {  
                // TODO Auto-generated method stub  
                return mData.size();  
            }  
       
            @Override  
            public Object getItem(int arg0) {  
                // TODO Auto-generated method stub  
                return null;  
           }  
       
            @Override  
            public long getItemId(int arg0) {  
                // TODO Auto-generated method stub  
                return 0;  
            }  
       
            @Override  
            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.img = (ImageView)convertView.findViewById(R.id.img);  
                    holder.title = (TextView)convertView.findViewById(R.id.title);  
                    holder.info = (TextView)convertView.findViewById(R.id.info);  
                    holder.viewBtn = (Button)convertView.findViewById(R.id.view_btn);  
                    convertView.setTag(holder);  
                       
                }else {                       
                    holder = (ViewHolder)convertView.getTag();  
                }  
                holder.img.setBackgroundResource((Integer)mData.get(position).get("img"));  
                holder.title.setText((String)mData.get(position).get("title"));  
                holder.info.setText((String)mData.get(position).get("info"));  
                //给每一个列表后面的按钮添加响应事件  
                holder.viewBtn.setOnClickListener(new View.OnClickListener() {  
                    @Override  
                    public void onClick(View v) {  
                        showInfo();                  
                    }  
                });  
  
                return convertView;  
            }  
        ------------  
        public final class ViewHolder{  
            public ImageView img;  
            public TextView title;  
            public TextView info;  
            public Button viewBtn;  
        }  


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值