RecycleView新增介面卡的監聽事件
阿新 • • 發佈:2018-11-07
看一下Adapter的完整程式碼。
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder>{ // 展示資料 private ArrayList<String> mData; // 事件回撥監聽 private MyAdapter.OnItemClickListener onItemClickListener; public MyAdapter(ArrayList<String> data) { this.mData = data; } public void updateData(ArrayList<String> data) { this.mData = data; notifyDataSetChanged(); } // 新增新的Item public void addNewItem() { if(mData == null) { mData = new ArrayList<>(); } mData.add(0, "new Item"); notifyItemInserted(0); } // 刪除Item public void deleteItem() { if(mData == null || mData.isEmpty()) { return; } mData.remove(0); notifyItemRemoved(0); } // ① 定義點選回撥介面 public interface OnItemClickListener { void onItemClick(View view, int position); void onItemLongClick(View view, int position); } // ② 定義一個設定點選監聽器的方法 public void setOnItemClickListener(MyAdapter.OnItemClickListener listener) { this.onItemClickListener = listener; } @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { // 例項化展示的view View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.view_rv_item, parent, false); // 例項化viewholder ViewHolder viewHolder = new ViewHolder(v); return viewHolder; } @Override public void onBindViewHolder(final ViewHolder holder, int position) { // 繫結資料 holder.mTv.setText(mData.get(position)); //③ 對RecyclerView的每一個itemView設定點選事件 holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(final View v) { if(onItemClickListener != null) { int pos = holder.getLayoutPosition(); onItemClickListener.onItemClick(holder.itemView, pos); } } }); holder.itemView.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { if(onItemClickListener != null) { int pos = holder.getLayoutPosition(); onItemClickListener.onItemLongClick(holder.itemView, pos); } //表示此事件已經消費,不會觸發單擊事件 return true; } }); } @Override public int getItemCount() { return mData == null ? 0 : mData.size(); } public static class ViewHolder extends RecyclerView.ViewHolder { TextView mTv; public ViewHolder(View itemView) { super(itemView); mTv = (TextView) itemView.findViewById(R.id.item_tv); } } }
設定Adapter的事件監聽。
mAdapter.setOnItemClickListener(new MyAdapter.OnItemClickListener() { @Override public void onItemClick(View view, int position) { Toast.makeText(MDRvActivity.this,"click " + position + " item", Toast.LENGTH_SHORT).show(); } @Override public void onItemLongClick(View view, int position) { Toast.makeText(MDRvActivity.this,"long click " + position + " item", Toast.LENGTH_SHORT).show(); } });