android-OnClickListener不适用于回收适配器内的视图

android-OnClickListener不适用于回收适配器内的视图,android,android-recyclerview,Android,Android Recyclerview,我有一个循环视图适配器,我实现了addOnItemTouchListener来监听每一行,它工作得很好 但是我有两个按钮在我的一行中,我已经为它们设置了OnClickListener,但是它没有被触发。这是我的代码: holder.register.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) {

我有一个循环视图适配器,我实现了addOnItemTouchListener来监听每一行,它工作得很好

但是我有两个按钮在我的一行中,我已经为它们设置了OnClickListener,但是它没有被触发。这是我的代码:

holder.register.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    ctx.startActivity(new Intent(ctx,Register.class));
                }
            });
我已经为我的按钮设置了android clickable,但没有做任何更改:

 <TextView
        android:id="@+id/register"
        android:layout_width="0dp"
        android:layout_height="40dp"
        android:layout_weight="1"
        android:clickable="true"
        android:textColor="#fff" />

如何调用按钮的click listener而不是recycle view TouchListener

试试下面。 从xml中删除android:clickable。然后尝试
setOnClickListener

<TextView
        android:id="@+id/register"
        android:layout_width="0dp"
        android:layout_height="40dp"
        android:layout_weight="1" 
        android:textColor="#fff" />

尝试这种方法,从xml文件中删除click event
android:clickable=“true”
,并将下面的代码添加到bindview holder中

holder.detailimage.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent = new Intent(ctx, MainActivity.class);
        ctx.startActivity(intent);
    }
});
这里是一个片段

// adaptor 
    public class youradaptor extends RecyclerView.Adapter<youradaptor.ViewHolder>
    {

    // create variable

    OnItemClickListener mOnItemClickListener;

    @Override
    public void onBindViewHolder(Holder holder, int position) 
    {
       holder.register.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) 
           {
               mOnItemClickListener.click(position);
           }
       });
    }

    //interface for Click-listener
    public interface OnItemClickListener
     {
       // method name which you can call in main class
       void click(int position);
     }
     public void setOnItemClickListener(OnItemClickListener onItemClickListener) 
     {
         mOnItemClickListener = onItemClickListener;
     }
}    

首先,正如您所说,您已经为每一行实现了
TouchListener
。所以你的整行都在听触摸,所以同一行中的另一个触摸事件会产生影响

您需要为每个子级重写onInterceptTouchEvent(),否则,它将仍然是父级的onTouchEvent

更好地在视图持有者本身中实现
onClick
事件。使用
OnclickListener
而不是
touchtlistener

<TextView
        android:id="@+id/register"
        android:layout_width="0dp"
        android:layout_height="40dp"
        android:layout_weight="1" 
        android:textColor="#fff" />

希望有帮助:)

我能知道为什么要为列表项设置TouchListner吗?显示xml和适配器类发布整个适配器代码和xml代码。