![](/img/trans.png)
[英]Android Studio: “cannot resolve symbol 'recyclerView'” but the RecyclerView symbol does work
[英]android studio: help RecyclerView Click does not work
我正在尝试从Main类中的RecyclerView
做一个click事件,但没有捕获到点击。
接口
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;
}
});
}
}
在类main中实现:
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的click事件,但是它不起作用,它无法捕获被单击项的位置。
不要在构造中使用setOnClickListener,而是重写onBindViewHolder函数,在其中使用setOnClickListener
请勿在ViewHOLDER类别中使用点击收听者
它将始终返回null,因为它不会初始化。
在recyclerview适配器的onBindViewHolder()方法中使用单击侦听器。
您可以像其他人所说的那样,通过在onBindViewHolder
设置侦听器来onBindViewHolder
,或者我有一个recyclerView
动作类,如onClick
和onLongClick
。
import android.support.v7.widget.RecyclerView;
import android.view.View;
public class ItemClickSupport {
private final RecyclerView mRecyclerView;
private OnItemClickListener mOnItemClickListener;
private OnItemLongClickListener mOnItemLongClickListener;
private View.OnClickListener mOnClickListener = new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mOnItemClickListener != null) {
// ask the RecyclerView for the viewHolder of this view.
// then use it to get the position for the adapter
RecyclerView.ViewHolder holder = mRecyclerView.getChildViewHolder(v);
mOnItemClickListener.onItemClicked(mRecyclerView, holder.getAdapterPosition(), v);
}
}
};
private View.OnLongClickListener mOnLongClickListener = new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
if (mOnItemLongClickListener != null) {
RecyclerView.ViewHolder holder = mRecyclerView.getChildViewHolder(v);
return mOnItemLongClickListener.onItemLongClicked(mRecyclerView, holder.getAdapterPosition(), v);
}
return false;
}
};
private RecyclerView.OnChildAttachStateChangeListener mAttachListener
= new RecyclerView.OnChildAttachStateChangeListener() {
@Override
public void onChildViewAttachedToWindow(View view) {
// every time a new child view is attached add click listeners to it
if (mOnItemClickListener != null) {
view.setOnClickListener(mOnClickListener);
}
if (mOnItemLongClickListener != null) {
view.setOnLongClickListener(mOnLongClickListener);
}
}
@Override
public void onChildViewDetachedFromWindow(View view) {
}
};
private ItemClickSupport(RecyclerView recyclerView) {
mRecyclerView = recyclerView;
// the ID must be declared in XML, used to avoid
// replacing the ItemClickSupport without removing
// the old one from the RecyclerView
mRecyclerView.setTag(R.id.item_click_support, this);
mRecyclerView.addOnChildAttachStateChangeListener(mAttachListener);
}
public static ItemClickSupport addTo(RecyclerView view) {
// if there's already an ItemClickSupport attached
// to this RecyclerView do not replace it, use it
ItemClickSupport support = (ItemClickSupport) view.getTag(R.id.item_click_support);
if (support == null) {
support = new ItemClickSupport(view);
}
return support;
}
public static ItemClickSupport removeFrom(RecyclerView view) {
ItemClickSupport support = (ItemClickSupport) view.getTag(R.id.item_click_support);
if (support != null) {
support.detach(view);
}
return support;
}
public ItemClickSupport setOnItemClickListener(OnItemClickListener listener) {
mOnItemClickListener = listener;
return this;
}
public ItemClickSupport setOnItemLongClickListener(OnItemLongClickListener listener) {
mOnItemLongClickListener = listener;
return this;
}
private void detach(RecyclerView view) {
view.removeOnChildAttachStateChangeListener(mAttachListener);
view.setTag(R.id.item_click_support, null);
}
public interface OnItemClickListener {
void onItemClicked(RecyclerView recyclerView, int position, View v);
}
public interface OnItemLongClickListener {
boolean onItemLongClicked(RecyclerView recyclerView, int position, View v);
}
}
不要忘记导入
<package>.R
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.