RecycleView(BaseViewHolder+BaseAdapter+不同类型适配+点击事件)
2017-08-29 18:42
369 查看
基类:BaseListAdapter
实现类 :RecyleViewAdapter
Listener:
基类Activity:
具体实现:RecycleViewActivity
github地址:https://github.com/hushendian/RecycleViewDemo.git
效果图:
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 savedInstance c9ab State) { 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
效果图:
相关文章推荐
- RecylerView中Adapter、ViewHolder和点击事件OnItemClickListener
- BaseRecyclerViewAdapterHelper开源项目之点击事件源码学习
- BaseRecyclerViewAdapterHelper开源项目之点击事件源码学习
- RecycleView的通用适配器BaseQuickAdapter处理item中子控件的点击事件以及cardview卡片阴影
- RecycleView设置点击的两种方式:adapter中的onBindViewHolder(VH,int)方法中进行;实现RecyclerView的addonItemTouchListerner()
- RecycleView不同类型Item&添加HeaderView&条目点击事件
- textview设置多种不同的字体颜色和点击事件
- Android中BaseAdapter的viewHolder工具类
- KanKan甄选,BaseAdapter我要对你说,ViewHolder你懂得,性能优化必读
- 在adapter中继承BaseAdapter得到数据穿插数据(ListView中加载不同的类型item)
- <十>RecycleView点击事件
- android点击事件在不同级别view中的优先级问题
- 最简单的slidemenu (外加recycleview点击事件)
- Recycleview的点击事件
- RecyclerView 通用适配 BaseQuickAdapter
- RecycleView多控件携带多个参数点击事件
- Android Listview加载不同布局,ViewHolder类型转换异常!!!
- recycleview条目点击事件
- Android databinding RecycleView item 子控件点击事件
- BaseRecyclerViewAdapterHelper 实现不同条目的列表