RecyclerView 子项目点击 onBindViewHolder()

RecyclerView Child Item Click in onBindViewHolder()

我在里面有一个 RecyclerView 和一个喜欢的按钮。例如,我想在单击按钮时发出 Toast 消息。示例代码:

class ViewHolder extends RecyclerView.ViewHolder{

    Button button;

  public ViewHolder(@NonNull View itemView) {
    super(itemView);

    button = itemView.findViewById(R.id.button);

    }
}

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

     holder.button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            Toast.makeText(context, ""+list.get(position).getId(), Toast.LENGTH_SHORT).show();
        }
    });

}

那么这种方式正确吗?由于性能问题,我不确定这必须在 onBindViewHolder() 内部吗?那么你能告诉我RecyclerView中的子项点击事件有没有更好的方法?顺便说一下,这些只是示例代码。实际上,当我单击按钮(向服务器请求)时,我正在处理更复杂的事情。

进行更改:

holder.button.layout.....

您需要获取该 holder 的实例,并在每次单击按钮时将其放置在您的视图中。

你可以简单地这样做:

class ViewHolder extends RecyclerView.ViewHolder{

Button button;

public ViewHolderMultiple(@NonNull View itemView) {
  super(itemView);

  button = itemView.findViewById(R.id.button);

  button.setOnClickListener(this);
}

@Override
public void onClick(View view) {
   Toast.makeText(context, ""+list.get(getAdapterPosition()).getId(), Toast.LENGTH_SHORT).show();
    }
}

@Kasim Özdemir 现在我的代码是这样的:

class ViewHolder extends RecyclerView.ViewHolder{

Button button;

public ViewHolderMultiple(@NonNull View itemView) {
  super(itemView);

    like_button = itemView.findViewById(R.id.like_button);
    comment_button = itemView.findViewById(R.id.comment_button);

     like_button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                RecyclerViewClicksUtils.likeClick(context,list,getAdapterPosition());
            }
        });

      comment_button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                RecyclerViewClicksUtils.likeClick(context,list,getAdapterPosition());
            }
        });
     }

      //I write other codes in RecyclerViewClicksUtils to avoid complexity in Adapter

 public static void likeClick(final Context context, final List<PostDetailsPojo> list, 
 final int position){

    Toast.makeText(context, ""+list.get(position).getId(), Toast.LENGTH_SHORT).show();
}

我希望这一定是正确的。