recyclerview现在是很广泛的,基本上取代了listview了。但是挺不解的是,这个好的一个框架没有给提供item的点击和长点击。不过这点问题是难不倒我们的,自己定义一个不就得了。
定义接口:
public interface RecylerListener{ void onItemClick(View view,int position); void onItemLongClick(View view,int position); }在onBindViewHolder中给item设置相应的事件,并回掉我们的监听。
if(recylerListener != null){ holder.ll.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { int pos = holder.getLayoutPosition(); recylerListener.onItemClick(holder.ll,pos); } }); holder.ll.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View view) { int pos = holder.getLayoutPosition(); recylerListener.onItemLongClick(holder.ll,pos); return true;//这里一定要记得返回true,不然事件没有被消耗掉,还会再次执行单击事件 } }); }
仅此而已,这个item的事件就自定义出来了。如果我们需要,就在对应的activity或者fragment中去实现这个接口就行了
myadapter = new MyAdapter(AddOrRemoveActivity.this,list); myadapter.setRecylerListener(AddOrRemoveActivity.this);
并在实现的两个方法中完成自己的逻辑就行
这里我在这两个方法中进行了additem和removeitem,为了向大家展示,recyclerview的另外一个优点:
添加和移除item时候的动画效果:
这是系统为我们提供的一个默认的实现类,我们也可以通过下面的代码进行自定义。
rv_recycler.setItemAnimator(new DefaultItemAnimator());
注意:如果想要有动画效果,我们就不能使用
myadapter.notifyDataSetChanged();而是使用:
notifyItemInserted(position);
notifyItemRemoved(position);
到这里,recyclerview的基本使用已经没有任何问题了。但是我知道这么强大的一个库,他的好处不仅仅如此,继续探究。。。