Android RecycleView OnClick不适用于整个itemView
因此,问题是onClick只对imageButton调用,而不是whileItemView。这是我的ViewHolder类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
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
onitemviewRecyclerView
不支持整个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我正在尝试解决一个类似的问题。如果您有任何想法或见解,我将不胜感激。位于此处:我正在尝试解决一个类似的问题。如果您有任何想法或见解,我将不胜感激。位于此处: