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
- BaseAdapter的简化
- BaseAdapter的简化实例
- 自定义封装了ViewHolder的BaseAdapter,简化了Adapter的编写
- 对BaseAdapter中ViewHolder编写简化
- 对BaseAdapter中ViewHolder编写简化
- [Android]对BaseAdapter中ViewHolder编写简化
- BaseAdapter的应用
- 万能的适配器 BaseAdapter
- BaseAdapter的使用
- BaseAdapter的ArrayIndexOutOfBoundsException
- 实现自定义的BaseAdapter
- BaseAdapter的notifyDataSetChanged方法
- BaseAdapter的使用
- BaseAdapter的使用指南
- BaseAdapter的ArrayIndexOutOfBoundsException
- BaseAdapter的使用
- BaseAdapter的使用
- BaseAdapter 遇见的问题
- JAVA从菜鸟【入门】到新手【实习】一一一一算法,数据结构与数据库
- 线程两种方式实现
- 不能声明为虚函数的函数
- SDNU 1352.Stalingrad: Enemy at the Gates 树状DP
- Map和AbstractMap
- BaseAdapter的简化
- Java实现求一个整数的二进制数中1的个数
- 大数据面试题
- ld: warning: directory not found for option '-L/...
- 集合编程
- 队列的链式实现
- 自定义滚动按钮(滚轮)进度调节器
- 递归算法——Hanoi(汉诺)问题(Java实现&C语言实现)
- android XmlSerializer 组拼xml