繁体   English   中英

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 中是否有更好的方法来处理子项单击事件? 顺便说一下,这些只是示例代码。 实际上,当我单击按钮(对服务器的请求)时,我正在处理更复杂的事情。

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

我希望这一定是正确的。

你可以简单地这样做:

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

做出改变:

持有人.按钮.布局....

您需要获取该持有人的实例并将其放置在您每次单击按钮时的视图上。

暂无
暂无

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

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