对BaseAdapter进行封装
2016-08-17 12:58
260 查看
对于Android开发者来讲,ListView控件肯定不陌生。它是用来以列表的形式展现数据,在项目开发中经常会用到。
要想使用ListView展现数据,必须执行ListView的setAdapter方法,将数据填充给ListView。相信大家对Adapter的写法并不陌生,以下为常用的写法:
如果项目中使用ListView比较多,那么每次都要重新写一遍Adapter继承BaseAdapter,为了解决这种重复编写的问题。将BaseAdpater进行封装
这样,在编写Adpater的时候,只需要继承MyBaseAdpater并实现相应构造方法与抽象方法,然后编写对应Holder集成BaseHolder即可。
要想使用ListView展现数据,必须执行ListView的setAdapter方法,将数据填充给ListView。相信大家对Adapter的写法并不陌生,以下为常用的写法:
class MyAdapter extends BaseAdapter { @Override public int getCount() { return list.size(); } @Override public Object getItem(int position) { return list.get(position); } @Override public long getItemId(int position) { return postion; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; if(convertView == null){ convertView = View.inflate(R.layout.list_item); holder = new ViewHolder(); holder.tvTitle = (TextView)convertView.findViewById(R.id.tvTitle); convertView.setTag(holder); }else{ holder = (ViewHolder)convertView.getTag(); } holder.tvTitle.setText(getItem(position).title); return convertView; } } class ViewHolder { public TextView tvTitle; }
如果项目中使用ListView比较多,那么每次都要重新写一遍Adapter继承BaseAdapter,为了解决这种重复编写的问题。将BaseAdpater进行封装
public abstract class MyBaseAdapter<T> extends BaseAdapter { private ArrayList<T> data; public MyBaseAdapter(ArrayList<T> data) { this.data = data; } @Override public int getCount() { return data.size(); } @Override public T getItem(int position) { return data.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { BaseHolder holder; if (convertView == null) { // 1. 加载布局文件 // 2. 初始化控件 findViewById // 3. 打一个标记tag holder = getHolder();// 子类返回具体对象 } else { holder = (BaseHolder) convertView.getTag(); } holder.setData(getItem(position)); return holder.getRootView(); } // 返回当前页面的holder对象, 必须子类实现 public abstract BaseHolder<T> getHolder(); }
public abstract class BaseHolder<T> { private View mRootView;// 一个item的根布局 private T data; //当new这个对象时, 就会加载布局, 初始化控件,设置tag public BaseHolder() { mRootView = initView(); // 3. 打一个标记tag mRootView.setTag(this); } // 1. 加载布局文件 // 2. 初始化控件 findViewById public abstract View initView(); // 返回item的布局对象 public View getRootView() { return mRootView; } // 设置当前item的数据 public void setData(T data) { this.data = data; refreshView(data); } // 获取当前item的数据 public T getData() { return data; } // 4. 根据数据来刷新界面 public abstract void refreshView(T data); }
这样,在编写Adpater的时候,只需要继承MyBaseAdpater并实现相应构造方法与抽象方法,然后编写对应Holder集成BaseHolder即可。
相关文章推荐
- Android 完美对BaseAdapter进行二次封装
- SuperBaseAdapter以及BaseHolder的抽取封装
- BaseAdapter的封装来实现模块化开发
- Android : 继承BaseAdapter对ListView进行填充
- Android 对 Adapter 的 ItemType 进行封装简化
- YCBaseAdapter封装控件
- 对BaseAdapter的进一步封装,使得BaseAdapter用起来更方便
- BaseRecycleViewAdapter的封装,基于多种bean数据源的呈现
- Android 之BaseRecyclerAdapter简单封装之路
- BaseRecyclerViewAdapterHelper源码解读(一) 封装简单的adapter和万能的BaseViewHolder
- 12,对ListView的适配器的封装BaseListAdapter
- listView利用BaseAdapter及异步任务Gson解析,使用Picasso网络获取资源进行图文混排,PullToRefresh上拉刷新下拉加载
- Android - 是时候为自己封装一个BaseRecyclerAdapter了
- BaseAdapter的封装
- 对BaseAdapter和ViewHolder的封装
- 116.黑名单设置的优化(封装BaseAdapter的方法)
- 为了灵活使用listView,封装了BaseAdapter
- BaseAdapter的封装
- BaseAdapter的简单封装
- [android开发]封装BaseAdapter, 简便代码