简体   繁体   English

如何处理单击 RecyclerView 一行中的某些项目?

[英]How can I handle click on some items inside a row of RecyclerView?

I want to add a popup menu when I click on the dots inside a RecyclerView row, this menu will show many options include (delete, update and more) and want to do the logic of this popup menu outside the adapter activity not inside it.当我单击 RecyclerView 行内的点时,我想添加一个弹出菜单,此菜单将显示许多选项,包括(删除、更新等),并希望在适配器活动之外而不是在其中执行此弹出菜单的逻辑。 How can I do it?我该怎么做?

这是我想做的事的照片

here is my Adapter Code这是我的适配器代码

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
}

} }

Thank you in Advance先感谢您

Inside the class viewholder you have a view, you can access the elements of the item with the itemView.在类视图中,您有一个视图,您可以使用 itemView 访问项目的元素。 it would be something like this:它会是这样的:

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()
    }
}

In Activity活动中

class YourActivity implements YourInterface{
override void yourMethod(){
//the logic of what you want to be done
}


}

In Interface界面内

public interface YourInterface{
void yourMethod()
}

Let me know if it works for you!请让我知道这对你有没有用!

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM