AndroidXRecyclerView最简单的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()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持创新互联。

网站栏目:AndroidXRecyclerView最简单的item点击事件处理
文章分享:https://www.cdcxhl.com/article32/pjjosc.html

成都网站建设公司_创新互联,为您提供外贸建站自适应网站Google搜索引擎优化软件开发网页设计公司

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

营销型网站建设