RecyclerView中單個item裡面的子檢視的點選監聽
阿新 • • 發佈:2018-12-30
資料來源:datas = new ArrayList<>();
for (int i = 0; i < 200; i++) {
datas.add("aaaaa" + i);
}
RecyclerView的一些設定:
recycle = view.findViewById(R.id.recycle); LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity()); recycle.setLayoutManager(linearLayoutManager); recycle.setHasFixedSize(true);
/** * 宣告介面變數 */ private onItemClick onItemClick;
/**
* 定義監聽介面 tag是關鍵
*/
public static interface onItemClick {
void onItemClick(int tag, View view, int position);
}
/** * 宣告給外界的方法 * * @param listener */ public void setOnItemClickListener(onItemClick listener) { this.onItemClick= listener; }
完整的程式碼:
package com.zdl.testapp; import android.support.v7.widget.PopupMenu; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ImageView; import android.widget.TextView; import java.util.List; /** * Created by zdl on 2017/10/22. */ public class MyadApter extends RecyclerView.Adapter<MyadApter.MyvViewholder> { private List<String> datas; public MyadApter(List<String> datas) { this.datas = datas; } /** * 宣告介面變數 */ private onItemClick onItemClick; /** * 定義監聽介面tag是區分點選的什麼,position是位置,要想獲取position還需要在重新設定下tag */ public static interface onItemClick { void onItemClick(int tag, View view, int position); } /** * 宣告給外界的方法 * * @param listener */ public void setOnItemClickListener(onItemClick listener) { this.onItemClick = listener; } /** * 繫結檢視 * * @param parent * @param viewType * @return */ @Override public MyvViewholder onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, null, false); MyvViewholder myvViewholder = new MyvViewholder(view); // view.setOnClickListener(this); myvViewholder.textView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { onItemClick.onItemClick(-55, view, (Integer) view.getTag()); } }); myvViewholder.imageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { onItemClick.onItemClick(-66, view, (Integer) view.getTag()); } }); return myvViewholder; } /** * 填充資料 * * @param holder * @param position */ @Override public void onBindViewHolder(MyvViewholder holder, int position) { holder.textView.setText(datas.get(position)); holder.itemView.setTag(position);//設定position的tag holder.textView.setTag(position); holder.imageView.setTag(position); } @Override public int getItemCount() { return datas.size(); } class MyvViewholder extends RecyclerView.ViewHolder { private TextView textView; private ImageView imageView; public MyvViewholder(View itemView) { super(itemView); textView = itemView.findViewById(R.id.textView); imageView = itemView.findViewById(R.id.iv); } } }
adapter的使用:
MyadApter myadApter = new MyadApter(datas); myadApter.setOnItemClickListener(new MyadApter.onItemClick() { @Override public void onItemClick(int tag, View view, int position) { switch (tag) { case -55: Toast.makeText(getActivity(), "aaaaaa" +position, Toast.LENGTH_SHORT).show(); break; case -66: Toast.makeText(getActivity(), "bbbb" + position, Toast.LENGTH_SHORT).show(); break; } } }); recycle.setAdapter(myadApter);