RecycleView(BaseViewHolder+BaseAdapter+不同类型适配+点击事件)
来源:互联网 发布:淘宝企业店铺公司更改 编辑:程序博客网 时间:2024/06/15 20:40
基类:BaseListAdapter
public abstract class BaseListAdapter<M, VH extends RecyclerView.ViewHolder> extends RecyclerView .Adapter<VH> { protected List<M> list; protected Context context; public BaseListAdapter(Context context, List<M> list, View v) { this.context = context; this.list = list; } @Override public int getItemCount() { Log.d("BaseListAdapter", "getItemCount: " + list.size()); return list.size(); } protected M getItem(int position) { return list.get(position); }}
实现类 :RecyleViewAdapter
public class RecyleViewAdapter extends BaseListAdapter<Student, RecyleViewAdapter.ViewHolder> { public RecyleViewAdapter(Context context, List<Student> list, View v) { super(context, list,v); } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { ViewHolder viewHolder = new ViewHolder(LayoutInflater.from(parent.getContext()).inflate(R .layout .item_recycle, parent, false)); return viewHolder; } @Override public void onBindViewHolder(ViewHolder holder, int position) { String name = null; switch (getItemViewType(position)) { case 0: name = list.get(position).getName(); break; case 1: name = "heheheheheheheh"; break; } holder.studentName.setText(name); } @Override public int getItemViewType(int position) { if (0 == list.get(position).getFlag()) { return 0; } else if (1 == list.get(position).getFlag()) { return 1; } return 0; } class ViewHolder extends RecyclerView.ViewHolder { TextView studentName; public ViewHolder(View itemView) { super(itemView); studentName = itemView.findViewById(R.id.studentName); } }}
Listener:
public abstract class OnRecyclerItemClickListener extends RecyclerView.SimpleOnItemTouchListener { private GestureDetectorCompat mGestureDetectorCompat; private RecyclerView recyclerView; public OnRecyclerItemClickListener(final RecyclerView recyclerView) { this.recyclerView = recyclerView; mGestureDetectorCompat = new GestureDetectorCompat(recyclerView.getContext(), new GestureDetector.SimpleOnGestureListener() { @Override public boolean onSingleTapUp(MotionEvent e) { View childView = recyclerView.findChildViewUnder(e.getX(), e.getY()); if (childView != null) { RecyclerView.ViewHolder viewHolder = recyclerView.getChildViewHolder (childView); onItemClick(viewHolder); } return true; } @Override public void onLongPress(MotionEvent e) { View childView = recyclerView.findChildViewUnder(e.getX(), e.getY()); if (childView != null) { RecyclerView.ViewHolder viewHolder = recyclerView.getChildViewHolder (childView); onItemLongClick(viewHolder); } } }); } @Override public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) { mGestureDetectorCompat.onTouchEvent(e); return false; } public abstract void onItemClick(RecyclerView.ViewHolder v); public abstract void onItemLongClick(RecyclerView.ViewHolder v);}
基类Activity:
public abstract class BaseActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); initVariables(); initView(savedInstanceState); loadData(); } protected void initVariables() {}; protected void initView(Bundle savedInstanceState) {}; protected void loadData() {};}
具体实现:RecycleViewActivity
public class RecycleViewActivity extends BaseActivity { @Nullable @BindView(R.id.recycleView) RecyclerView recyclerView; List<Student> list; @Override protected void initView(Bundle savedInstanceState) { setContentView(R.layout.activity_recycle_view); ButterKnife.bind(this); Log.d("RecycleViewActivity", "initView: " + recyclerView); } @Override protected void initVariables() { initData(); } @Override protected void loadData() { recyclerView.setLayoutManager(new LinearLayoutManager(this)); Log.d("RecycleViewActivity", "loadData: " + list); recyclerView.setAdapter(new RecyleViewAdapter(this, list, null)); recyclerView.addOnItemTouchListener(new OnRecyclerItemClickListener(recyclerView ) { @Override public void onItemClick(RecyclerView.ViewHolder v) { Toast.makeText(RecycleViewActivity.this, "点击了" + v.getLayoutPosition(), Toast .LENGTH_SHORT).show(); } @Override public void onItemLongClick(RecyclerView.ViewHolder v) { Toast.makeText(RecycleViewActivity.this, "长按了" + v.getLayoutPosition(), Toast .LENGTH_SHORT).show(); } }); } @Override protected void onDestroy() { super.onDestroy(); ButterKnife.bind(this).unbind(); } protected void initData() { list = new ArrayList<Student>(); for (int i = 0; i < 30; i++) { Student student = new Student(); student.setName("学生" + i); Random random = new Random(); int a = random.nextInt(2); Log.d("RecycleViewActivity", "initData: " + a); student.setFlag(a); list.add(student); } }}
github地址:https://github.com/hushendian/RecycleViewDemo.git
效果图:
阅读全文
0 0
- RecycleView(BaseViewHolder+BaseAdapter+不同类型适配+点击事件)
- RecycleView的不同类型Item点击事件
- RecycleView不同类型Item&添加HeaderView&条目点击事件
- <十>RecycleView点击事件
- RecycleView 点击事件
- Recycleview的点击事件
- RecycleView点击事件
- RecycleView的点击事件
- recycleview点击事件
- recycleview条目点击事件
- Recycleview点击事件
- Recycleview的点击事件
- RecycleView的Item点击事件
- RecycleView 添加item点击事件
- RecycleView怎么添加点击事件
- Recycleview添加item点击事件
- 最简单的slidemenu (外加recycleview点击事件)
- ListView 优化篇:从 BaseAdapter 到 BaseViewHolder
- listagg实现数据库行转列
- 在 CTO 眼里,什么样的程序员是更值得信赖的?
- 小白算法练习 二分搜素练习 Drying POJ 3104 lanqiao 二分
- Combo Box Control
- 【Redis源码剖析】
- RecycleView(BaseViewHolder+BaseAdapter+不同类型适配+点击事件)
- JAVA互联网架构学习之Spring之AOP
- Android填坑之旅(第十四篇)关于软键盘弹出未及时隐藏导致自定义View的onMeasure方法测量错误引发的血案
- 前端开发周报- CSS 布局方式方式与JavaScript数据结构和算法
- 为什么 30 岁的工程师容易跳槽?
- 链表实现自定义的队列
- Insert boot media in selected boot device and press a key
- LeetCode二叉树基础题(不断更新)
- MYSQL外键-T-SQL