7.如何給RecyclerView新增Click和LongClick事件
阿新 • • 發佈:2018-10-31
/**
* 作者: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;
}