簡體   English   中英

如何處理單擊 RecyclerView 一行中的某些項目?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM