您的位置:首页 > 移动开发 > Android开发

Android应用开发之BaseAdapter基类的写法

2016-03-12 22:05 441 查看
/**
* 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的使用显得十分简洁,清晰明了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Android小技巧