5.2 Adapter

时间:2023-03-10 03:29:28
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;

}

}