Android RecycleView OnClick不适用于整个itemView

Android RecycleView OnClick不适用于整个itemView,android,Android,因此,问题是onClick只对imageButton调用,而不是whileItemView。这是我的ViewHolder类 public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{ protected TextView title; protected TextView rank; protected ImageView image; prote

因此,问题是onClick只对imageButton调用,而不是whileItemView。这是我的ViewHolder类

public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
    protected TextView title;
    protected TextView rank;
    protected ImageView image;
    protected ImageButton share;
    public ViewHolder(View itemView) {
        super(itemView);
        title =  (TextView) itemView.findViewById(R.id.main_title);
        rank = (TextView) itemView.findViewById(R.id.rank_text);
        image = (ImageView) itemView.findViewById(R.id.main_image);
        share = (ImageButton) itemView.findViewById(R.id.main_share);
        share.setOnClickListener(this);
        itemView.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        Log.d("click", "clicked at" + getAdapterPosition());
    }
}
更新:


因为我在我的recycleview中使用了cardviews,我最终将我的viewholder代码更改为

public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
    protected TextView title;
    protected TextView rank;
    protected ImageView image;
    protected ImageButton share;
    protected CardView cardView;
    public ViewHolder(View itemView) {
        super(itemView);
        title =  (TextView) itemView.findViewById(R.id.main_title);
        rank = (TextView) itemView.findViewById(R.id.rank_text);
        image = (ImageView) itemView.findViewById(R.id.main_image);
        share = (ImageButton) itemView.findViewById(R.id.main_share);
        cardView = (CardView) itemView.findViewById(R.id.main_card_view);
        share.setOnClickListener(this);
        cardView.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        Log.d("test", "test" + getAdapterPosition());
    }
}
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
    protected TextView title;
    protected TextView rank;
    protected ImageView image;
    protected ImageButton share;
    protected CardView cardView;
    public ViewHolder(View itemView) {
        super(itemView);
        title =  (TextView) itemView.findViewById(R.id.main_title);
        rank = (TextView) itemView.findViewById(R.id.rank_text);
        image = (ImageView) itemView.findViewById(R.id.main_image);
        share = (ImageButton) itemView.findViewById(R.id.main_share);
        cardView = (CardView) itemView.findViewById(R.id.main_card_view);
        share.setOnClickListener(this);
        cardView.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        Log.d("test", "test" + getAdapterPosition());
    }
}

它可以工作

您对
项目视图
共享

public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{ protected TextView title; protected TextView rank; protected ImageView image; protected ImageButton share; protected CardView cardView; public ViewHolder(View itemView) { super(itemView); title = (TextView) itemView.findViewById(R.id.main_title); rank = (TextView) itemView.findViewById(R.id.rank_text); image = (ImageView) itemView.findViewById(R.id.main_image); share = (ImageButton) itemView.findViewById(R.id.main_share); cardView = (CardView) itemView.findViewById(R.id.main_card_view); itemView.share.setOnClickListener(this); itemView.cardView.setOnClickListener(this); } @Override public void onClick(View v) { Log.d("test", "test" + getAdapterPosition()); } }
  • 独立视图正确单击

    @Override
    public void onClick(View view) {
        if (view.equals(share) {
            // 'share' was tapped
        }
        else {
            // 'itemView' was tapped
        }
    }
    
  • 在您的XML布局中(我猜是这样:)更改如下(即在正确的位置添加
    可点击的

    //这是您的列表单元格(项目呈现器)
    

如果由于某种原因无法使用,请发布您的XML布局和任何其他您可以共享的代码。

您对
itemView
共享使用相同的单击侦听器

  • 独立视图正确单击

    @Override
    public void onClick(View view) {
        if (view.equals(share) {
            // 'share' was tapped
        }
        else {
            // 'itemView' was tapped
        }
    }
    
  • 在您的XML布局中(我猜是这样:)更改如下(即在正确的位置添加
    可点击的

    //这是您的列表单元格(项目呈现器)
    

如果由于某种原因无法使用,请发布您的XML布局和任何其他您可以共享的代码。

RecyclerView
不支持整个itemview上的
onClick
方法。如果要实现
onClick
,需要在itemview的子视图上设置
OnClickListener


同时,
RecyclerView
只支持
onTouch
方法
OnTouchListener
onitemview

RecyclerView
不支持整个
onClick
方法itemview。如果要实现
onClick
,需要在itemview的子视图上设置
OnClickListener


同时,
recycleview
只支持
onTouch
方法
OnTouchListener
onitemview

因为我在我的recycleview中使用了CardView,所以我最终将我的viewholder代码更改为这个

public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
    protected TextView title;
    protected TextView rank;
    protected ImageView image;
    protected ImageButton share;
    protected CardView cardView;
    public ViewHolder(View itemView) {
        super(itemView);
        title =  (TextView) itemView.findViewById(R.id.main_title);
        rank = (TextView) itemView.findViewById(R.id.rank_text);
        image = (ImageView) itemView.findViewById(R.id.main_image);
        share = (ImageButton) itemView.findViewById(R.id.main_share);
        cardView = (CardView) itemView.findViewById(R.id.main_card_view);
        share.setOnClickListener(this);
        cardView.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        Log.d("test", "test" + getAdapterPosition());
    }
}
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
    protected TextView title;
    protected TextView rank;
    protected ImageView image;
    protected ImageButton share;
    protected CardView cardView;
    public ViewHolder(View itemView) {
        super(itemView);
        title =  (TextView) itemView.findViewById(R.id.main_title);
        rank = (TextView) itemView.findViewById(R.id.rank_text);
        image = (ImageView) itemView.findViewById(R.id.main_image);
        share = (ImageButton) itemView.findViewById(R.id.main_share);
        cardView = (CardView) itemView.findViewById(R.id.main_card_view);
        share.setOnClickListener(this);
        cardView.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        Log.d("test", "test" + getAdapterPosition());
    }
}

`因为我在我的recycleview中使用了cardviews,我最终将我的viewholder代码更改为这个

public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
    protected TextView title;
    protected TextView rank;
    protected ImageView image;
    protected ImageButton share;
    protected CardView cardView;
    public ViewHolder(View itemView) {
        super(itemView);
        title =  (TextView) itemView.findViewById(R.id.main_title);
        rank = (TextView) itemView.findViewById(R.id.rank_text);
        image = (ImageView) itemView.findViewById(R.id.main_image);
        share = (ImageButton) itemView.findViewById(R.id.main_share);
        cardView = (CardView) itemView.findViewById(R.id.main_card_view);
        share.setOnClickListener(this);
        cardView.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        Log.d("test", "test" + getAdapterPosition());
    }
}
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
    protected TextView title;
    protected TextView rank;
    protected ImageView image;
    protected ImageButton share;
    protected CardView cardView;
    public ViewHolder(View itemView) {
        super(itemView);
        title =  (TextView) itemView.findViewById(R.id.main_title);
        rank = (TextView) itemView.findViewById(R.id.rank_text);
        image = (ImageView) itemView.findViewById(R.id.main_image);
        share = (ImageButton) itemView.findViewById(R.id.main_share);
        cardView = (CardView) itemView.findViewById(R.id.main_card_view);
        share.setOnClickListener(this);
        cardView.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        Log.d("test", "test" + getAdapterPosition());
    }
}
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{ protected TextView title; protected TextView rank; protected ImageView image; protected ImageButton share; protected CardView cardView; public ViewHolder(View itemView) { super(itemView); title = (TextView) itemView.findViewById(R.id.main_title); rank = (TextView) itemView.findViewById(R.id.rank_text); image = (ImageView) itemView.findViewById(R.id.main_image); share = (ImageButton) itemView.findViewById(R.id.main_share); cardView = (CardView) itemView.findViewById(R.id.main_card_view); itemView.share.setOnClickListener(this); itemView.cardView.setOnClickListener(this); } @Override public void onClick(View v) { Log.d("test", "test" + getAdapterPosition()); } } `它是有效的

public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{ protected TextView title; protected TextView rank; protected ImageView image; protected ImageButton share; protected CardView cardView; public ViewHolder(View itemView) { super(itemView); title = (TextView) itemView.findViewById(R.id.main_title); rank = (TextView) itemView.findViewById(R.id.rank_text); image = (ImageView) itemView.findViewById(R.id.main_image); share = (ImageButton) itemView.findViewById(R.id.main_share); cardView = (CardView) itemView.findViewById(R.id.main_card_view); itemView.share.setOnClickListener(this); itemView.cardView.setOnClickListener(this); } @Override public void onClick(View v) { Log.d("test", "test" + getAdapterPosition()); } } 公共类ViewHolder扩展了RecyclerView.ViewHolder实现了View.OnClickListener{ 受保护的文本视图标题; 受保护的文本视图等级; 保护图像查看图像; 受保护的图像按钮共享; 受保护的CardView CardView; 公共视图持有者(视图项视图){ 超级(项目视图); title=(TextView)itemView.findViewById(R.id.main\u title); rank=(TextView)itemView.findViewById(R.id.rank\u text); image=(ImageView)itemView.findViewById(R.id.main\u image); share=(ImageButton)itemView.findViewById(R.id.main\u共享); cardView=(cardView)itemView.findViewById(R.id.main\u card\u view); itemView.share.setOnClickListener(此); itemView.cardView.setOnClickListener(此); } @凌驾 公共void onClick(视图v){ Log.d(“test”,“test”+getAdapterPosition()); } } 公共类ViewHolder扩展了RecyclerView.ViewHolder实现了View.OnClickListener{ 受保护的文本视图标题; 受保护的文本视图等级; 保护图像查看图像; 受保护的图像按钮共享; 受保护的CardView CardView; 公共视图持有者(视图项视图){ 超级(项目视图); title=(TextView)itemView.findViewById(R.id.main\u title); rank=(TextView)itemView.findViewById(R.id.rank\u text); image=(ImageView)itemView.findViewById(R.id.main\u image); share=(ImageButton)itemView.findViewById(R.id.main\u共享); cardView=(cardView)itemView.findViewById(R.id.main\u card\u view); itemView.share.setOnClickListener(此); itemView.cardView.setOnClickListener(此); } @凌驾 公共void onClick(视图v){ Log.d(“test”,“test”+getAdapterPosition()); } }
recyclerView中的多个onClick事件:

    public static class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener{

    public ImageView iconImageView;
    public TextView iconTextView;

    public MyViewHolder(final View itemView) {
        super(itemView);

        iconImageView = (ImageView) itemView.findViewById(R.id.myRecyclerImageView);
        iconTextView = (TextView) itemView.findViewById(R.id.myRecyclerTextView);
        // set click event
        itemView.setOnClickListener(this);
        iconTextView.setOnClickListener(this);
        // set long click event
        iconImageView.setOnLongClickListener(this);
    }

    // onClick Listener for view
    @Override
    public void onClick(View v) {

        if (v.getId() == iconTextView.getId()){
            Toast.makeText(v.getContext(), "ITEM PRESSED = " + String.valueOf(getAdapterPosition()), Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(v.getContext(), "ROW PRESSED = " + String.valueOf(getAdapterPosition()), Toast.LENGTH_SHORT).show();
        }
    }


    //onLongClickListener for view
    @Override
    public boolean onLongClick(View v) {

        final AlertDialog.Builder builder = new AlertDialog.Builder(v.getContext());
        builder.setTitle ("Hello Dialog")
                .setMessage ("LONG CLICK DIALOG WINDOW FOR ICON " + String.valueOf(getAdapterPosition()))
                .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                    }
                });

        builder.create().show();
        return true;
    }
}

recyclerView中的多个onClick事件:

    public static class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener{

    public ImageView iconImageView;
    public TextView iconTextView;

    public MyViewHolder(final View itemView) {
        super(itemView);

        iconImageView = (ImageView) itemView.findViewById(R.id.myRecyclerImageView);
        iconTextView = (TextView) itemView.findViewById(R.id.myRecyclerTextView);
        // set click event
        itemView.setOnClickListener(this);
        iconTextView.setOnClickListener(this);
        // set long click event
        iconImageView.setOnLongClickListener(this);
    }

    // onClick Listener for view
    @Override
    public void onClick(View v) {

        if (v.getId() == iconTextView.getId()){
            Toast.makeText(v.getContext(), "ITEM PRESSED = " + String.valueOf(getAdapterPosition()), Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(v.getContext(), "ROW PRESSED = " + String.valueOf(getAdapterPosition()), Toast.LENGTH_SHORT).show();
        }
    }


    //onLongClickListener for view
    @Override
    public boolean onLongClick(View v) {

        final AlertDialog.Builder builder = new AlertDialog.Builder(v.getContext());
        builder.setTitle ("Hello Dialog")
                .setMessage ("LONG CLICK DIALOG WINDOW FOR ICON " + String.valueOf(getAdapterPosition()))
                .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {

                    }
                });

        builder.create().show();
        return true;
    }
}

看看这个:@Garrett请看上面的URL看看这个:@Garrett请看上面的URL我正在尝试解决一个类似的问题。如果您有任何想法或见解,我将不胜感激。位于此处:我正在尝试解决一个类似的问题。如果您有任何想法或见解,我将不胜感激。位于此处: