Android RecyclerView (三)初學,為RecyclerView新增Item點選監聽。
阿新 • • 發佈:2019-01-09
前兩篇文章講述瞭如何基本的使用RecyclerView呈現出自己想要的效果,但是我好奇的是,為什麼RecyclerView沒有.SetOnClick之類的方法呢,RecyclerView不得不承認,它是一款很強大的軟體,僅僅幾行程式碼就可以切換出自己想要的佈局,但是它並沒有屬於自己的CilckListener,這裡就需要我自己去新增程式碼實現點選監聽的功能了。
當然我們需要在介面卡中去新增程式碼實現這個功能。我現在在第一篇文章的程式碼中新增就可以了。
MyAdapter
public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private Context mContext;
private List<String> infos ;
private LayoutInflater inflater;
public interface OnItemOnClickListener{
void onItemOnClick(View view,int pos);
void onItemLongOnClick(View view ,int pos);
}
private OnItemOnClickListener mOnItemOnClickListener;
public void setOnItemClickListener(OnItemOnClickListener listener){
this.mOnItemOnClickListener = listener;
}
public MyAdapter(Context mContext,List<String> infos){
this.mContext = mContext;
this.infos = infos;
}
public RecyclerView.ViewHolder onCreateViewHolder (ViewGroup parent, int viewType) {
View view = LayoutInflater.from(this.mContext).inflate(R.layout.activity_item,parent,false);
ViewHolder viewHolder = new ViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) {
ViewHolder viewHolder = (ViewHolder) holder;
viewHolder.getTextView().setText(infos.get(position));
if(mOnItemOnClickListener!=null){
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mOnItemOnClickListener.onItemOnClick(holder.itemView,position);
}
});
holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
mOnItemOnClickListener.onItemLongOnClick(holder.itemView,position);
return false;
}
});
}
}
class ViewHolder extends RecyclerView.ViewHolder{
private TextView textView;
public ViewHolder(View itemView) {
super(itemView);
textView = (TextView) itemView.findViewById(R.id.textView);
}
public TextView getTextView(){
return textView;
}
}
@Override
public int getItemCount() {
return infos.size();
}
}
這裡可以看到,我們先添加了一個介面
public interface OnItemOnClickListener{
void onItemOnClick(View view,int pos);
void onItemLongOnClick(View view ,int pos);
}
這個接口裡面我們寫了兩個函式名稱,一個是點選 監聽,一個是長按監聽。
然後我們又在MyAdapter類中寫了一個設定監聽的方法和聲明瞭一個這個介面的內部變數。
private OnItemOnClickListener mOnItemOnClickListener;
public void setOnItemClickListener(OnItemOnClickListener listener){
this.mOnItemOnClickListener = listener;
}
然後這個setOnItemClickListener就是供外部來設定監聽的,在這裡面我們隊我們內部成員OnItemOnClickListener進行了傳參賦值。
然後我們在ViewBinder裡進行繫結。
if(mOnItemOnClickListener!=null){
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
mOnItemOnClickListener.onItemOnClick(holder.itemView,position);
}
});
holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View view) {
mOnItemOnClickListener.onItemLongOnClick(holder.itemView,position);
return false;
}
});
這裡面我們先判斷內部成員是否初始化,如果不為空就進行下面的操作。
相當於我們給每個點選的ItemView分別新增監聽然後達到我們給RecyclerView新增監聽器的目的。
然後MainActivity中新增的程式碼如下:
myAdapter.setOnItemClickListener(new MyAdapter.OnItemOnClickListener() {
@Override
public void onItemOnClick(View view, int pos) {
Toast.makeText(MainActivity.this, "This is"+pos, Toast.LENGTH_SHORT).show();
}
@Override
public void onItemLongOnClick(View view, int pos) {
Toast.makeText(MainActivity.this, "LongClick"+pos, Toast.LENGTH_SHORT).show();
}
});
這樣基本就是實現了我們RecyclerView的Item的點選監聽和長按監聽效果。