2015-10-14 127 views
8

我已经从 Stack overflow解决方案实现了Recyclerview onclickListener。此解决方案适用于回收商物品点击。但我无法得到哪个子视图(例如:ImageView,Button)被点击从行中。Recyclerview addOnItemTouchListener获取哪个子视图在行内被点击

 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

如何跟踪点击whick看法?

回答

5

该答案已过时,因为它使用RecyclerView.getChildPosition(View)这是已弃用。尝试将其替换为RecyclerView.getChildAdapterPosition(View)

如果我是你,我会为每个想要倾听的ViewHolder及其子视图创建侦听器。老实说,我似乎没有看到使用您引用的更复杂方法的好处。此外,该方法只会告诉你一个项目被点击,没有关于该项目的子视图。

另外,根据docs,RecyclerView.OnItemTouchListener是为了在列表滚动时检测对物品的接触而使用,而不是用于常规或直接接触。

+0

完全同意您对create listeners的评论f或每个ViewHolder – Simon

7

下面是一个ViewHolder,它包含两个文本视图, titledescription

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实施传递一个被点击的还有RecyclerView项目的位置在适配器View那收到点击事件。

最后使用View.getId()检索OnViewClickListener实现中点击的视图的ID。

0

尝试将onClickListeners添加到子视图。

1

设置标签

您可以设置标签,以你的观点,同时通过初始化它们:

view1.setTag(1); 

这将设置视图标记为1

然后在onItemClick方法:

@Override 
public void onItemClick(View view, int position) { 
if(view.getTag()==1) 
{ 
//do something 
} 
else 
{ 
//do something else 
} 
相关问题