【发布时间】:2019-03-05 21:32:49
【问题描述】:
我正在尝试从 Main 类中的 RecyclerView 执行点击事件,但它没有捕捉到点击。
界面
public interface OnItemClickListener {
void onItemClick(int posicao);
void onItemLongClick(int posicao);
}
接口属性和设置器
private OnItemClickListener mlistener;
public void setOnItemClickListener(OnItemClickListener listener){
mlistener = listener;
}
类 ViewHolder
public class ViewHolderArtista extends RecyclerView.ViewHolder{
public ViewHolderArtista(@NonNull View itemView, final OnItemClickListener listener) {
super(itemView);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(listener != null){
int position = getAdapterPosition();
if(position != RecyclerView.NO_POSITION){
listener.onItemClick(position);
}
}
}
});
itemView.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
if (listener != null){
int position = getAdapterPosition();
if (position != RecyclerView.NO_POSITION){
listener.onItemLongClick(position);
}
}
return true;
}
});
}
}
在主类中实现:
artistaAdapter.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(int posicao) {
Log.d("TESTE", "CLIQUE CURTO" +posicao);
}
@Override
public void onItemLongClick(int posicao) {
Log.d("TESTE", "CLIQUE LONGO" +posicao);
}
});
但是,单击时没有任何反应:
也就是我在主类中实现了RecyclerView的点击事件,但是它不起作用,它没有捕捉到被点击的item的位置。
【问题讨论】:
-
@azurefrog 再次查看问题,以便您理解。
-
您是否尝试在其构造函数中将新的
OnItemClickListener传递给artistaAdapter?看起来您只在View那里注册了侦听器,而不是在SetOnItemClickListener()中。 -
@azurefrog 是的,我试过了,但我觉得这样更实用、更简单,因为我只得到了特定的点击事件。只是那不起作用,有几个教程这样做并且它起作用,除了我的:(
-
有人帮忙吗?
-
您是否检查过您是否正确发送了监听器?尝试评论
if (listener != null){。
标签: java android android-recyclerview