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

/**
 * 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的使用显得十分简洁,清晰明了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值