BaseAdapter的简化

是否对每次写BaseAdapter感到厌烦,下面给出一个简单的封装:

public class EasyAdapter<D, H extends EasyAdapter.ViewHolder> extends BaseAdapter{

    protected static class ViewHolder{
        public View itemView;
        public ViewHolder(View itemView){
            if (itemView == null) {
                throw new IllegalArgumentException("itemView may not be null");
            }
            this.itemView = itemView;
        }
    }

    public interface Capacity<D, H extends ViewHolder>{
        H onCreateViewHolder(ViewGroup parent, int viewType);
        void onBindViewHolder(D data, H holder);
    }

    private List<D> datas = new ArrayList<>();
    private Capacity<D, H> capacity;

    public EasyAdapter(Capacity<D, H> capacity){
        this.capacity = capacity;
    }

    public void addData(D data){
        this.datas.add(data);
        notifyDataSetChanged();
    }

    public void updateData(List<D> datas){
        this.datas = datas;
        notifyDataSetChanged();
    }

    @Override
    public int getCount() {
        return datas.size();
    }

    @Override
    public D 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) {
        View v;
        if (convertView == null){
            H holder = capacity.onCreateViewHolder(parent, getItemViewType(position));
            v = holder.itemView;
            v.setTag(holder);
        }else{
            v = convertView;
        }
        D item = getItem(position);
        capacity.onBindViewHolder(item, (H)v.getTag());
        return v;
    }
}
其中D代表item对应的数据Bean类型,H代表item对应的View相应的ViewHolder类型。

下面是使用,首先是Bean:

public class TestCaseBean {
    public String testName;
    public Runnable testCase;
    public TestCaseBean(String testName, Runnable testCase){
        this.testName = testName;
        this.testCase = testCase;
    }
}
然后是Adapter和ViewHolder:

    private static class CaseViewHolder extends EasyAdapter.ViewHolder{
        private TextView tv;
        protected CaseViewHolder(View itemView){
            super(itemView);
            tv = (TextView) itemView;
        }
    }

    private class CaseAdapter extends EasyAdapter<TestCaseBean, CaseViewHolder>{

        public CaseAdapter() {
            super(new Capacity<TestCaseBean, CaseViewHolder>() {
                @Override
                public CaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
                    CaseViewHolder viewHolder = new CaseViewHolder(new TextView(MainActivity.this));
                    return viewHolder;
                }

                @Override
                public void onBindViewHolder(TestCaseBean data, CaseViewHolder holder) {
                    TextView tv = holder.tv;
                    tv.setText(data.testName);
                }
            });
        }
    }
Adapter的代码是仿照RecyclerView来实现的。

是不是觉得世界往更美好的方向近了一点?

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值