如何优雅的写代码——使用RecyleView的基类Adapter
2015-09-15 14:12
453 查看
使用基类是代码更清晰也更简单,就是容易看也容易写。平常写个Adapter可能又长又乱,现在可以这样写了:
这个基类写也很简单,还可以自己添加项目所需的方法进去。下面是我使用的基类,还是很简单的。
这个基类还加了一些数据的处理方法,方便使用。
public class AppListAdapter extends RecycleVariableAdapter<AppViewHolder, AppInfo> { public AppListAdapter(Context context, List<AppInfo> data) { super(context, data); } @Override public AppViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = inflater.inflate(R.layout.item_app_list, parent, false); return new AppViewHolder(view); } @Override public void onBindViewHolder(AppViewHolder holder, int position) { final AppInfo appInfo = data.get(position); holder.appName.setText(appInfo.getName()); holder.appSize.setText(appInfo.getSize()); WpPicasso.with(context) .load(appInfo.getIcon()) .placeholder(R.drawable.ic_appstore_default_icon) .into(holder.icon); } }是不是很简单,不过这里还需要自定义一个ViewHolder,像这样:
class AppViewHolder extends RecyclerHolder { ImageView icon; TextView appName; TextView appSize; public AppViewHolder(View view) { super(view); icon = ViewFinder.find(view, R.id.icon); appName = ViewFinder.find(view, R.id.app_name); appSize = ViewFinder.find(view, R.id.app_size); } }就三个步骤,建一个ViewHolder;为ViewHoder绑定view;根据data设置ViewHolder的View。
这个基类写也很简单,还可以自己添加项目所需的方法进去。下面是我使用的基类,还是很简单的。
public abstract class RecycleVariableAdapter<Holder extends RecyclerHolder, T> extends RecyclerView.Adapter<Holder> implements Variable<T> { /** adapter 数据集 */ public List<T> data; /** Context */ protected Context context; /** 用于解析布局 */ protected LayoutInflater inflater; public RecycleVariableAdapter(Context context, List<T> data) { this.context = context; this.data = data; inflater = LayoutInflater.from(context); } public Context getContext(){ return this.context; } @Override public int getItemCount() { return data != null ? data.size() : 0; } /** * 是否是个空的 * @return */ public boolean isEmpty(){ return getItemCount() == 0; } //兼容处理. public T getItem(int position){ return data.get(position); } /** * 判断非空 * @param adapter * @return */ public static boolean checkEmpty(RecycleVariableAdapter adapter){ return adapter == null || adapter.isEmpty(); } @Override public void refresh(List<T> data) { this.data.clear(); this.data = data; notifyDataSetChanged(); } @Override public void append(T data) { this.data.add(data); notifyItemInserted(this.data.size() - 1); } @Override public void append(int position, T data) { this.data.add(position,data); notifyItemInserted(position); } @Override public void append(List<T> data) { int oldSize = this.data.size(); this.data.addAll(data); notifyItemRangeInserted(oldSize, data.size()); } @Override public T remove(T item) { this.data.remove(item); notifyItemRemoved(this.data.size() + 1); return item; } @Override public T remove(int position) { T item = this.data.get(position); this.data.remove(position); notifyItemRemoved(position); return item; } public void removeAll() { this.data.clear(); notifyDataSetChanged(); } }
public class RecyclerHolder extends RecyclerView.ViewHolder { public View rootView; public RecyclerHolder(View itemView) { super(itemView); rootView = itemView; } }
这个基类还加了一些数据的处理方法,方便使用。
相关文章推荐
- loadrunner icrosoft Visual c++2005 sp1运行时组件,就会提示命令行选项语法错误,键入“命令/?”
- Eclipse打jar包,资源文件的读取
- Eclipse打jar包,资源文件的读取
- Java多线程(一)
- 【9-15】python学习笔记01
- c# unicode 编码 中文转换 已测试(转)
- 为什么要用C++编写服务端程序?
- CCOA\CCOA\WF\CCForm\Dtl.aspx 明细表列上下排序显示
- ASP.NET MVC5网站开发用户登录、注销(五)
- 基于Java组播技术到安卓的实战应用于讲解(一)
- spring Jackson日期时间转换
- 访问修饰符 自我理解
- HTML控件ID和NAME属性的区别,以及如何在asp.net页面的.CS文件中获得.ASPX页面中HTML控件的值
- HTML控件ID和NAME属性的区别,以及如何在asp.net页面的.CS文件中获得.ASPX页面中HTML控件的值
- java链接mysql
- myeclipse中SVN插件安装方法
- Hibernate 入门教程(纯Eclipse版)
- Struts 2 Hello World Example
- spring mybatis atomikos 多库分布式事务demo
- c/c++ 对于浮点型的判断