我已从此 Stack overflow解决方案中实施了Recyclerview onclickListener。此解决方案适用于回收商项目点击。但是我无法从行中单击哪个子视图(例如:ImageView,Button)。
mAttachmentRecyclerview.addOnItemTouchListener(
new RecyclerItemClickListener(getApplicationContext(), new RecyclerItemClickListener.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
if (view.getId()==R.id.attachmnet_remove) {
attachmentsList.remove(position);
mAttachmentAdapter.notifyDataSetChanged();
attachmentCount--;
}
}
}
));
onItemClick(view,position)
始终将视图 id 返回为 -1
如何跟踪点击的视图?
答案 0 :(得分:7)
下面是ViewHolder
,其中包含两个文本视图即。 title
和description
:
public class CustomViewHolder extends RecyclerView.ViewHolder {
private final OnViewClickListener mListener;
public final TextView title;
public final TextView description;
public interface OnViewClickListener {
void onViewClick(View v, int adapterPosition);
}
public CustomViewHolder(View itemView, OnViewClickListener mListener) {
super(itemView);
this.mListener = mListener;
title = (TextView) itemView.findViewById(R.id.titleTextView);
description = (TextView) itemView.findViewById(R.id.descriptionTextView);
title.setOnClickListener(onClickListener);
description.setOnClickListener(onClickListener);
}
private final View.OnClickListener onClickListener = new View.OnClickListener() {
@Override
public void onClick(View view) {
mListener.onViewClick(view, getAdapterPosition());
}
};
}
这两个子视图都附加了OnClickListener
个调用自定义OnViewClickListener
实现,通过点击的View
以及位置接收点击事件的> RecyclerView
适配器项。
最后使用View.getId()
在OnViewClickListener
实施中检索点击后的视图ID。
答案 1 :(得分:5)
该答案已过时,因为它使用已弃用的RecyclerView.getChildPosition(View)
。尝试将其替换为RecyclerView.getChildAdapterPosition(View)
。
如果我是你,我会为每个ViewHolder
及其想要听的子视图创建监听器。老实说,我似乎没有看到使用你引用的更复杂方法的好处。此外,该方法只会告诉您单击了某个项目,而没有关于该项目的子视图。
此外,根据docs,当您想要在列表滚动时检测项目的触摸时,使用RecyclerView.OnItemTouchListener
,而不是常规或直接触摸。
答案 2 :(得分:1)
设置标签
您可以在通过以下方式初始化视图时将标记设置为您的视图:
view1.setTag(1);
这会将视图标记设置为1。
然后在onItemClick方法:
@Override
public void onItemClick(View view, int position) {
if(view.getTag()==1)
{
//do something
}
else
{
//do something else
}
答案 3 :(得分:0)
尝试将onClickListeners添加到子视图。