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

来源:互联网 发布:天敏网络电视机顶盒 编辑:程序博客网 时间:2024/04/27 13:59

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;          }  


0 0
原创粉丝点击