/**
* Created by Administrator on 2015/11/4.
*/
public class MyBaseAdapter<T> extends BaseAdapter {
//其实无需设置context全局变量,getView方法中的parent.getContext()可以替代
public Context context;
//数据集合中的元素类型为泛型
private List<T> datas;
//以下两个方法分别封装了 覆盖数据/增加数据 的方法,
//Adapter持有的数据外部不可见,
//通过Adapter的成员方法来对数据进行操作,避免Activity代码凌乱。
public void setData(List<T> beans){
datas=beans;
notifyDataSetChanged();
}
public void addData(List<T> beans){
if (beans==null){
return;
}
if (datas==null){
setData(beans);
}
datas.addAll(beans);
notifyDataSetChanged();
}
public MyBaseAdapter(){
super();
}
public MyBaseAdapter(Context context) {
super();
this.context=context;
}
@Override
public int getCount() {
try {//避免空指针异常
return datas.size();
}catch (Exception e){
e.printStackTrace();
}
return 0;
}
@Override
public Object getItem(int position) {
return datas.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
context=parent.getContext();
return null;
}
}
有了上面这个 继承自BaseAdapter的 Adapter基类,在实际项目中 不同页面的ListView用到的不同Adapter 就可以直接继承这个MyBaseAdapter,并且指定好数据的类型,然后只需要重写getView方法就行了,再根据具体需要增加成员方法即可。十分方便,且封装性也很好。
以下就是 实际程序页面中用到的Adapter:
public class AlbumAdapter extends MyBaseAdapter<AlbumBean>{
@Override
public View getView(final int position,View convertView,ViewGroup parent){
AlbumBean bean=(AlbumBean)getItem(position);
ViewHolder holder;
if(convertView==null){
convertView= LayoutInflater.from(parent.getContext()).inflate(R.layout.item_album,parent,false);
holder=new ViewHolder(convertView);
convertView.setTag(holder);
}else{
holder=(ViewHolder)convertView.getTag();
}
holder.tv_title.setText(bean.getAlbumTitle());
holder.tv_detail.setText(bean.getAlbumContent());
return convertView;
}
private class ViewHolder {
public ViewHolder(View convertView) {
tv_title =(TextView)convertView.findViewById(R.id.tv_title);
tv_detail =(TextView)convertView.findViewById(R.id.tv_detail);
}
TextView tv_title;
TextView tv_detail;
}
}
可以看出,只需要重写getView()方法即可,十分方便。
然后再看看Activity中的使用:
先创建实例:
AlbumAdapter adapter=new AlbumAdapter ();
再与ListView关联:
listView.setAdapter(adapter);
然后网络访问成功的回调中,拿到数据并传入adapter中:
假设解析数据得到一个List< AlbumBean> datas,
adapter.setData(datas);
就这样在Activity中Adapter的使用显得十分简洁,清晰明了。