Android XRecyclerView最简单的item点击事件处理

发布时间:2019-08-08 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了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教程
脚本网站
android studio

脚本宝典总结

以上是脚本宝典为你收集整理的Android XRecyclerView最简单的item点击事件处理全部内容,希望文章能够帮你解决Android XRecyclerView最简单的item点击事件处理所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:Classdivthis