1. 程式人生 > >7.如何給RecyclerView新增Click和LongClick事件

7.如何給RecyclerView新增Click和LongClick事件

/**
 * 作者:Pich
 * 原文連結:http://me.woblog.cn/
 * QQ群:129961195
 * 微信公眾號:woblog
 * Github:https://github.com/lifengsofts
 */

詳解RecyclerView系列文章目錄

概述

如果你做Android開發,那麼你肯定聽過RecyclerView沒有提供Click和LongClick事件的預設實現。不知道官方這是個什麼用意,那麼這節課程就來實現這個功能,實現完成的效果圖如下圖所示:

這裡我們不講過分的封裝,現在只是隨便寫,目的就是更容易懂。後面的到封裝的課程會講進一步的封裝。

新增OnItemClickListener

public interface OnItemClickListener {

  void onItemClick(ViewHolder holder,int position);
}

新增一個介面,用來在adapter裡面點選事件後回撥到你需要的位置。

在adapter中實現點選事件

public void onBindViewHolder(final CardViewActivity.MyAdapter.MyViewHolder holder,
    final int position) {
  String d = CardViewActivity.this
.data.get(position); holder.bindData(d, position); if (onItemClickListener != null) { holder.itemView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { onItemClickListener.onItemClick(holder,position); } }); } }

這裡我們先判斷onItemClickListener是否為空,然後在設定點選事假,這樣比一上來就設定點選監聽器,然後再點選事件裡面在判斷監聽器是否為空更節省資源。

處理點選事件

接下來就可以在回撥的方法裡面處理點選事件了。

String s = data.get(position);
Intent intent = new Intent(this, NewsDetailActivity.class);
intent.putExtra(NewsDetailActivity.URL, s);
startActivity(intent, options.toBundle());

長按事件也就很簡單了,可以直接改上面的監聽器,在新增一個方法,也可以在建立一個介面,我們這裡再建立一個介面。

建立OnItemLongClickListener

public interface OnItemLongClickListener {
  boolean onItemLongClick(ViewHolder holder,int position);
}

特別注意的是我們在回撥中傳入了ViewHolder,這樣的好處是,我們在點選事件裡面就可以拿到相應的view,可以直接執行一些動畫,不用再次拿到View在findViewById了。

處理長按事件

這個沒必要多說了,大家基本都會,但是要注意的是onItemLongClick有返回值,他根據返回時判斷是否在呼叫OnItemClick,所以這個地方一定要根據實際情況返回不同的值。

@Override
public boolean onItemLongClick(ViewHolder holder, int position) {
  Toast.makeText(this, "Long Click", Toast.LENGTH_SHORT).show();
  return true;
}