Android App开发中RecyclerView控件的基本使用教程

2019-12-10 18:28:08王振洲

提供了SlideInOutLeftItemAnimator,SlideInOutRightItemAnimator, 
SlideInOutTopItemAnimator,SlideInOutBottomItemAnimator等动画效果。

Click and LongClick

不过一个挺郁闷的地方就是,系统没有提供ClickListener和LongClickListener。 
不过我们也可以自己去添加,只是会多了些代码而已。 
实现的方式比较多,你可以通过mRecyclerView.addOnItemTouchListener去监听然后去判断手势, 
当然你也可以通过adapter中自己去提供回调,这里我们选择后者,前者的方式,大家有兴趣自己去实现。

那么代码也比较简单:

class HomeAdapter extends RecyclerView.Adapter<HomeAdapter.MyViewHolder>
{

//...
  public interface OnItemClickLitener
  {
    void onItemClick(View view, int position);
    void onItemLongClick(View view , int position);
  }

  private OnItemClickLitener mOnItemClickLitener;

  public void setOnItemClickLitener(OnItemClickLitener mOnItemClickLitener)
  {
    this.mOnItemClickLitener = mOnItemClickLitener;
  }

  @Override
  public void onBindViewHolder(final MyViewHolder holder, final int position)
  {
    holder.tv.setText(mDatas.get(position));

    // 如果设置了回调,则设置点击事件
    if (mOnItemClickLitener != null)
    {
      holder.itemView.setOnClickListener(new OnClickListener()
      {
        @Override
        public void onClick(View v)
        {
          int pos = holder.getLayoutPosition();
          mOnItemClickLitener.onItemClick(holder.itemView, pos);
        }
      });

      holder.itemView.setOnLongClickListener(new OnLongClickListener()
      {
        @Override
        public boolean onLongClick(View v)
        {
          int pos = holder.getLayoutPosition();
          mOnItemClickLitener.onItemLongClick(holder.itemView, pos);
          return false;
        }
      });
    }
  }
//...
}

adapter中自己定义了个接口,然后在onBindViewHolder中去为holder.itemView去设置相应 
的监听最后回调我们设置的监听。

最后别忘了给item添加一个drawable:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://www.easck.com/apk/res/android" >
  <item android:state_pressed="true" android:drawable="@color/color_item_press"></item>
  <item android:drawable="@color/color_item_normal"></item>
</selector>