Android XRecyclerView最简单的item点击事件处理
以前一直都是用PullToRefresh,后来觉得还是太out了。现在很多人都是用RecyclerView,很简单的用法,布局多样化,主要是有瀑布流。这才知道RecyclerView.LayoutManager真正的强大。
但是说要addHeaderView这个的话,RecyclerView没有实现,所以我用了XRecyclerView,其实它也是在RecyclerView的基础上再次封装的,用起来还是蛮好的。
这里说一下,正确的使用XRecyclerView点击item做事件处理的问题。其实就是在RecyclerView.ViewHolder里面的item做点击,那么设计到一个问题就是如何简单使用了。
一般我们会直接在item布局中的最外层设置一个id=”@+id/…”,然后在onBindViewHolder中用holder.**.setOnClickListener()进行事件处理,你看看你是不是这样做的,如果这样做的话,那就继续往下看,教你简单的。
简单使用item的点击事件
1、先看下RecyclerView.ViewHolder源码是怎么写的
/** * A ViewHolder describes an item view and metadata about its place within the RecyclerView. * * <p>{@link Adapter} implementations should subclass ViewHolder and add fields for caching * potentially expensive {@link View#findViewById(int)} results.</p> * * <p>While {@link LayoutParams} belong to the {@link LayoutManager}, * {@link ViewHolder ViewHolders} belong to the adapter. Adapters should feel free to use * their own custom ViewHolder implementations to store data that makes binding view contents * easier. Implementations should assume that individual item views will hold strong references * to <code>ViewHolder</code> objects and that <code>RecyclerView</code> instances may hold * strong references to extra off-screen item views for caching purposes</p> */ public static abstract class ViewHolder { public final View itemView; ....... public ViewHolder(View itemView) { if (itemView == null) { throw new IllegalArgumentException("itemView may not be null"); } this.itemView = itemView; } ....... }
2、再来看看我们继承它做了什么事情
public class XRViewHolder extends RecyclerView.ViewHolder { public XRViewHolder(View view) { super(view); ButterKnife.bind(this, view); } ....... public void onBindViewHolder(VH holder, final int position) { if (position >= 0) { holder.itemView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { itemClick(getItem(position), position); } }); } } }
看到我们自定义的XRViewHolder的构造方法中也用到了super(view)。
其实这里的view就是item的布局,这样的话,我们要实现点击事件就很容易了,可以直接在用holder.itemView.setOnClickListener
item的点击错位问题
用XRecyclerView.getChildAt(position).setOnClickListener()出现错位问题,如果你在addHeaderView就会出现这种错位的问题会更加明显,可以先来看看XRecyclerView里面的部分源码。
public class XRecyclerView extends RecyclerView { private WrapAdapter mWrapAdapter; ...... public void addHeaderView(View view) { sHeaderTypes.add(HEADER_INIT_INDEX + mHeaderViews.size()); mHeaderViews.add(view); if (mWrapAdapter != null) { mWrapAdapter.notifyDataSetChanged(); } } ...... private class WrapAdapter extends RecyclerView.Adapter<ViewHolder> { @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { if (viewType == TYPE_REFRESH_HEADER) { return new SimpleViewHolder(mRefreshHeader); } else if (isHeaderType(viewType)) { return new SimpleViewHolder(getHeaderViewByType(viewType)); } else if (viewType == TYPE_FOOTER) { return new SimpleViewHolder(mFootView); } return adapter.onCreateViewHolder(parent, viewType); } }
当我们每次addHeaderView时他都会进行notifyDataSetChanged,而且在onCreateViewHolder也有了对应的isHeaderType判断,所以当你想选择第一个item做事件处理时可能就pos=0是属于headerview。
总结
item点击事件简单方便快捷的方式:holder.itemView.setOnClickListener()
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
- Android XRecyclerView最简单的item点击事件处理
- Android-RecyclerView-Item点击事件设置
- Android中RecyclerView点击item展开列表详细内容(超简单实现)
- Android RecyclerView Item点击事件
- Android-RecyclerView-Item点击事件设置
- Android中为RecyclerView添加item的点击事件
- Android RecyclerView给Item添加点击事件
- Android 高级UI设计笔记20:RecyclerView 的详解之RecyclerView添加Item点击事件
- Android中RecyclerView使用,RecyclerView-Item点击事件设置
- Android-RecyclerView-Item点击事件设置
- Android 技术之为RecyclerView添加item的点击事件
- Android零基础入门第66节:RecyclerView点击事件处理
- android v7兼容包RecyclerView的使用(四)——点击事件的不同方式处理
- 【Android 界面效果48】Android-RecyclerView-Item点击事件设置
- android v7兼容包RecyclerView的使用(四)——点击事件的不同方式处理
- Android中RecyclerView的item中控件的点击事件添加删除一行、上移下移一行的代码实现
- Android中RecyclerView点击Item设置事件
- Android中Recyclerview使用6----添加条目得到点击事件和长按事件(另一种写法,较简单)
- Android中RecyclerView简单的点击事件
- 详解Android中回调机制与RecyclerView的Item点击事件实现