[英]How can I handle click on some items inside a row of RecyclerView?
當我單擊 RecyclerView 行內的點時,我想添加一個彈出菜單,此菜單將顯示許多選項,包括(刪除、更新等),並希望在適配器活動之外而不是在其中執行此彈出菜單的邏輯。 我該怎么做?
這是我的適配器代碼
public class JobAdapter extends RecyclerView.Adapter<JobAdapter.ViewHolder> {
private List<JobModel> mData;
private LayoutInflater mInflater;
private JobAdapter.ItemClickListener mClickListener;
// data is passed into the constructor
public JobAdapter(Context context, List<JobModel> mData) {
this.mInflater = LayoutInflater.from(context);
this.mData = mData;
}
// inflates the row layout from xml when needed
@NonNull
@Override
public JobAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = mInflater.inflate(R.layout.job_item, parent, false);
return new JobAdapter.ViewHolder(view);
}
// binds the data to the TextView in each row
@Override
public void onBindViewHolder(final JobAdapter.ViewHolder holder, final int position) {
holder.Name.setText(mData.get(position).getName());
holder.HeadLine.setText(mData.get(position).getHeadLine());
holder.Time.setText(mData.get(position).getTime());
}
// total number of rows
@Override
public int getItemCount() {
return mData.size();
}
// stores and recycles views as they are scrolled off screen
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener {
TextView Name;
TextView HeadLine;
TextView Time;
View MyJobOptions;
ViewHolder(View itemView) {
super(itemView);
Name = itemView.findViewById(R.id.employer_name);
HeadLine = itemView.findViewById(R.id.head_line);
Time = itemView.findViewById(R.id.date_of_job);
MyJobOptions = itemView.findViewById(R.id.textViewOptions);
// these are used when the click on the whole view not on item inside view
itemView.setOnClickListener(this);
itemView.setOnLongClickListener(this);
MyJobOptions.setOnClickListener(this); // new
}
@Override
public void onClick(View view) {
if (mClickListener != null) {
mClickListener.onItemClick(view, getAdapterPosition());
// mClickListener.onMyJobOptionsClick(view, getAdapterPosition()); // new
}
}
@Override
public boolean onLongClick(View view) {
if (mClickListener != null) mClickListener.onItemLongClick(view, getAdapterPosition());
return true;
}
}
// convenience method for getting data at click position
JobModel getItem(int id) {
return mData.get(id);
}
// allows clicks events to be caught
void setClickListener(JobAdapter.ItemClickListener itemClickListener) {
this.mClickListener = itemClickListener;
}
// parent activity will implement this method to respond to click events
public interface ItemClickListener {
void onItemClick(View view, int position);
void onItemLongClick(View view, int position);
// void onMyJobOptionsClick(View view, int position); //new
}
}
先感謝您
在類視圖中,您有一個視圖,您可以使用 itemView 訪問項目的元素。 它會是這樣的:
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener {
YourInterface interface;
TextView Name;
TextView HeadLine;
TextView Time;
View MyJobOptions;
ViewHolder(View itemView) {
super(itemView);
Name = itemView.findViewById(R.id.employer_name);
HeadLine = itemView.findViewById(R.id.head_line);
Time = itemView.findViewById(R.id.date_of_job);
MyJobOptions = itemView.findViewById(R.id.textViewOptions);
// these are used when the click on the whole view not on item inside view
itemView.setOnClickListener(this);
itemView.setOnLongClickListener(this);
MyJobOptions.setOnClickListener(this);
itemView.findViewById(R.id.TheITEMTHATYOUWANTOCLICK).setOnClickListener{
interface.yourMethod()
}
}
活動中
class YourActivity implements YourInterface{
override void yourMethod(){
//the logic of what you want to be done
}
}
界面內
public interface YourInterface{
void yourMethod()
}
請讓我知道這對你有沒有用!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.