RecyclerView的Adapter的抽取
来源:互联网 发布:原生js图片上传 编辑:程序博客网 时间:2024/05/22 11:57
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更加好用”
0 0
- RecyclerView的Adapter的抽取
- RecyclerView万能的Adapter
- RecyclerView的万能Adapter
- RecyclerView.Adapter的封装
- RecyclerView.Adapter的实现
- RecyclerView+RecyclerView.Adapter+RecyclerView.ViewHolder的使用
- RecyclerView 万能适配器的抽取
- RecyclerView 的 RecyclerView.Adapter 通用版的实现
- 对RecycleView的adapter的抽取
- ListView和GridView的adapter的抽取
- RecyclerView的Adapter最佳实战
- Recyclerview Adapter 的简单封装
- RecyclerView的Adapter万能适配包
- RecyclerView.Adapter 的简单封装
- 通用的RecyclerView Adapter适配器
- 打造 RecyclerView的 通用Adapter
- 实现RecyclerView 的通用Adapter
- 通用的recyclerview adapter 适配
- spring开发 MethodInvokingFactoryBean的学习
- 神经网络
- Qt下使用GDB远程调试ARM板
- 手势识别
- oracle 五种约束 常用单组分组函数
- RecyclerView的Adapter的抽取
- offsetof' was not declared in this scope
- 100+ 超全的web开发工具和资源
- coyote
- Pascal's Triangle
- Android点击事件的三种写法
- C++ 构造器
- 第十六周项目一 a阅读程序(1)
- js 输出html的表格数据到 excel