RecyclerView的Adapter的抽取
2016-06-10 16:28
579 查看
RecyclerView的Adapter的抽取
最近常用recyclerview控件,每次都需要写一大串代码,于是参考了鸿洋的文章,抽取了一个adapter的基类。
具体代码:ContentFragment类
public class ContentFragment extends Fragment { private RecyclerView mRecyclerView; private SwipeRefreshLayout mSwipeRefreshLayout; private List<Bean> mLists = new ArrayList<>(); private CommomAdapter adapter; private View view; private LinearLayoutManager manager; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment_content, container, false); } @Override public void onViewCreated(View view, Bundle savedInstanceState) { mRecyclerView = (RecyclerView) view.findViewById(R.id.recycler); mSwipeRefreshLayout = (SwipeRefreshLayout) view.findViewById(R.id.refresh); this.view = LayoutInflater.from(getContext()).inflate(R.layout.footer_view, null, false); initRefresh(); initRecycler(); initData(); initListener(); } private void initRefresh() { mSwipeRefreshLayout.setColorSchemeResources(android.R.color.holo_red_dark, android.R.color.holo_orange_dark, android.R.color.holo_green_dark, android.R.color.holo_blue_bright); mSwipeRefreshLayout.setOnRefreshListener(new OnRefreshListener() { @Override public void onRefresh() { mSwipeRefreshLayout.postDelayed(new Runnable() { @Override public void run() { mSwipeRefreshLayout.setRefreshing(false); } }, 2000); } }); } private void initRecycler() { manager = new LinearLayoutManager(getContext()); mRecyclerView.setLayoutManager(manager); mRecyclerView.setHasFixedSize(true); adapter = new ContentAdapter(getContext(), R.layout.fragment_content_recycer_item, mLists); mRecyclerView.setAdapter(adapter); } private void initData() { Bean bean = new Bean("窗前明月有几许"); for (int i = 0; i < 30; i++) { try { mLists.add(bean.clone()); } catch (CloneNotSupportedException e) { e.printStackTrace(); } } } private void initListener() { mRecyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { } @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { } }); } }
ContentAdapter
public class ContentAdapter extends CommonAdapter<Bean> { public ContentAdapter(Context context, @LayoutRes int layoutRes, @NonNull List<Bean> list) { super(context, layoutRes, list); } @Override protected void convert(MyViewHolder holder, Bean bean) { holder.setText(R.id.tv_content, bean.getName()).setTextColor(R.id.tv_content, mContext.getResources().getColor(android.R.color.holo_orange_dark)); } }
CommonAdapter
public abstract class CommonAdapter<T> extends RecyclerView.Adapter<MyViewHolder> { protected Context mContext; protected List<T> mLists; private int mLayoutRes; public CommonAdapter(Context context, @LayoutRes int layoutRes, @NonNull List<T> list) { this.mContext = context; this.mLayoutRes = layoutRes; this.mLists = list; } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { return MyViewHolder.get(mContext, mLayoutRes, parent); } @Override public void onBindViewHolder(MyViewHolder holder, int position) { convert(holder, mLists.get(position)); } protected abstract void convert(MyViewHolder holder, T t); @Override public int getItemCount() { if (mLists == null) { return 0; } return mLists.size(); } }
MyViewHolder
public class MyViewHolder extends RecyclerView.ViewHolder { private SparseArray<View> mViews; private Context mContext; public MyViewHolder(View itemView) { super(itemView); mViews = new SparseArray<>(); } public MyViewHolder(View itemView, Context context) { this(itemView); mContext = context; } public static MyViewHolder get(Context context, @LayoutRes int layoutRes, ViewGroup parent) { View view = LayoutInflater.from(context).inflate(layoutRes, parent, false); return new MyViewHolder(view, context); } public <T extends View> T getView(@IdRes int viewId) { View view = mViews.get(viewId); if (view == null) { view = itemView.findViewById(viewId); mViews.put(viewId, view); } return (T) view; } public View getItemView() { return itemView; } /** * @by zhang 2016/6/10 ------------------------监听事件----------------------------------- */ /** * @by zhang 2016/6/10 条目的点击事件 */ public MyViewHolder setOnItemclickListener(View.OnClickListener listener) { itemView.setOnClickListener(listener); return this; } /** * @by zhang 2016/6/10 条目的触摸事件 */ public MyViewHolder setOnTouchListener(View.OnTouchListener listener) { itemView.setOnTouchListener(listener); return this; } /** @by zhang 2016/6/10 可以继续拓展------------------------------------------- */ /** * @by zhang 2016/6/10 -------------------给itemView中的控件设置属性----------------------- */ /** * @by zhang 2016/6/10 给定TextView的id,设置text */ public MyViewHolder setText(@IdRes int viewId, String text) { TextView view = getView(viewId); view.setText(text); return this; } public MyViewHolder setTextColor(@IdRes int viewId, @ColorInt int color) { TextView view = getView(viewId); view.setTextColor(color); return this; } /** @by zhang 2016/6/10 可以继续拓展------------------------------------------- */ }
参考:鸿洋大神的“为RecyclerView打造通用Adapter 让RecyclerView更加好用”
相关文章推荐
- reflection
- Qt下使用GDB远程调试ARM板
- 神经网络
- Java POI读取Excel 2003/2007/2010例子
- Spring 的Helloworld
- openwrt 编译node.js功能(解决Illegal instruction错误)
- win7升级到win10所遇到的坑
- Eclipse编写jsp文件连接Mysql数据库的安装配置指南
- Sencha Touch MVC 中 store 的使用
- 大数据爬虫基础(四)MAVEN的安装配置和使用(下)--JAVA简单爬虫
- github常见操作和常见错误!错误提示:fatal: remote origin already exists
- Storm安装配置
- Sencha Touch MVC 中 store 的使用
- 2548 自然数积分解
- 动态SQL之标签
- Hadoop Hive sql语法详解
- 第20章:Derived Classes
- Android查看调用函数名与行号等信息的日志类
- Range——删除内容的某些文字
- 生成对区域动作的链接 | 使用区域 | 高级路由特性