BaseAdapter的简化

来源:互联网 发布:号码复式软件 编辑:程序博客网 时间:2024/06/06 10:56

是否对每次写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
原创粉丝点击