【问题标题】:Unable to get Click action on RecyclerView无法在 RecyclerView 上获得点击操作
【发布时间】:2022-01-20 04:18:52
【问题描述】:

我在 BottomSheet 中使用 RecyclerView。数据已成功获取,但无法对 RecyclerView 项目进行点击操作。这是我的BottomSheetAdapter 代码:

public class BottomSheetAdapter extends RecyclerView.Adapter<BottomSheetAdapter.ViewHolder> {
List<UserDetailsModel> userDetailsModelList;
Context context;
private Onitemclicklistenersuggestion listener;

public BottomSheetAdapter(List<UserDetailsModel> userDetailsModelList, Context context) {
    this.userDetailsModelList = userDetailsModelList;
    this.context = context;

}

@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(context).inflate(R.layout.bottom_sheet_recycler_items, parent, false);
    return new BottomSheetAdapter.ViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {

    UserDetailsModel model = userDetailsModelList.get(position);
    holder.firstNameLabel.setText(model.getFirst_name().trim());


}

@Override
public int getItemCount() {
    return userDetailsModelList.size();
}


class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
    TextView firstNameLabel;
   
    public ViewHolder(@NonNull View itemView) {
        super(itemView);
        firstNameLabel = itemView.findViewById(R.id.firstNameLabel);
        itemView.setOnClickListener(this);


    }

    @Override
    public void onClick(View v) {

        if (listener != null) {
            int position = getAdapterPosition();
            if (position != RecyclerView.NO_POSITION) {
                listener.clicktoupdate(position);
            }

        }
    }
}

public interface Onitemclicklistenersuggestion {
    void clicktoupdate(int poistion);

}

public void setOnitemclicklistener(Onitemclicklistenersuggestion mlistener) {
    listener = mlistener;
}

}

这是我的BottomSheetDialog 代码:

    public class BottomSheetDialog extends BottomSheetDialogFragment 
implements BottomSheetAdapter.Onitemclicklistenersuggestion {

  bottomSheetAdapter = new BottomSheetAdapter(userDetailsModelList, getActivity());
  bottomSheetRecycler.setAdapter(bottomSheetAdapter);
  bottomSheetRecycler.setLayoutManager(new LinearLayoutManager(getActivity()));
  bottomSheetAdapter.setOnitemclicklistener(new BottomSheetAdapter.Onitemclicklistenersuggestion() {
      @Override
      public void clicktoupdate(int poistion) {
          Log.e("Pos", "Pos");
      }
  });
  bottomSheetAdapter.notifyDataSetChanged();

}

  @Override
    public void clicktoupdate(int poistion) {
        Toast.makeText(getContext(), ""+poistion, Toast.LENGTH_SHORT).show();
    }

但在单击 RecyclerView 项目后,日志或 Toast 消息均未显示。请帮我修复它。数以百万计的感谢。

【问题讨论】:

  • 点击按钮时int position = getAdapterPosition(); 获得什么价值?
  • 我添加了一个 Log.e("POSITION", ""+position);在此行之后,但即使我单击 recyclerview 中的项目,它也不会被执行
  • 使用firstNameLabel.setOnClickListener(this);查看是否获取Toast或点击firstNameLabel登录。
  • 是的,我现在正在获取日志语句,
  • 但是,为什么不显示在项目点击上

标签: android android-recyclerview


【解决方案1】:

尝试在 ViewHolder 类中设置 onClick 逻辑。 比如,

class ViewHolder extends RecyclerView.ViewHolder {
    TextView firstNameLabel;
   
    public ViewHolder(@NonNull View itemView) {
        super(itemView);
        
        itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               // show a toast msg or whatever action you need...
            }
        });

        firstNameLabel = itemView.findViewById(R.id.firstNameLabel);
    }
}

【讨论】:

  • 我想通过 BottomSheetDialog 类而不是 adpater 访问点击
  • @Zibran 从您的第二个代码 sn-p 中不清楚您如何声明 bottomSheetAdapterbottomSheetRecycler 变量。请出示您的所有代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-14
  • 1970-01-01
  • 1970-01-01
  • 2021-11-23
  • 2018-04-23
相关资源
最近更新 更多