2017-08-12 227 views
1

我有一個回收視圖適配器,我實現了addOnItemTouchListener來偵聽每一行,它工作正常。android- OnClickListener不適用於回收適配器內的視圖

但我在我的行中有兩個按鈕,我已經爲它們設置了OnClickListener,但它沒有被觸發。這是我的代碼:

holder.register.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        ctx.startActivity(new Intent(ctx,Register.class)); 
       } 
      }); 

我給自己定的Android可點擊我的按鈕,但它並沒有任何變化:

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

我怎樣才能在點擊監聽,呼籲我的按鈕,而不是循環查看TouchListener?

+0

顯示您的XML和適配器類 –

+0

發表您的整個適配器代碼和XML代碼。 –

回答

1

首先的一個片段

// 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代替TouchListener

希望它能幫助:)

0

請嘗試以下。 從xml中刪除android:clickable。並嘗試setOnClickListener

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

仍然不能正常工作 –

+0

我知道你爲什麼設置onTouchListner爲你的列表項? –

0

嘗試這種方法,並從XML文件中刪除click事件android:clickable="true"並添加以下代碼bindview倉內

holder.detailimage.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     Intent intent = new Intent(ctx, MainActivity.class); 
     ctx.startActivity(intent); 
    } 
}); 
0

你需要爲這個代碼建立持有人,你必須定義 您的按鈕例如持有人函數內部:

這是我的myproject代碼

public class ListAdapterw extends RecyclerView.Adapter<ListAdapterw.Holder> { 

    List<cardViewhomeinfo> sliders; 

    ImageLoader imageLoader=ImageLoader.getInstance(); 

    public ListAdapterw(List<cardViewhomeinfo> sliders) { 
     this.sliders = sliders; 
    } 

    @Override 
    public Holder onCreateViewHolder(ViewGroup parent, int viewType) { 
     LayoutInflater inflater=LayoutInflater.from(parent.getContext()); 
     View view=inflater.inflate(R.layout.recycleview_home,parent,false); 
     return new Holder(view); 
    } 

    @Override 
    public void onBindViewHolder(Holder holder, int position) { 
     holder.title.setText(sliders.get(position).getTitle()); 
     holder.id=sliders.get(position).getId(); 
     imageLoader.displayImage(""+sliders.get(position).getPicture(),holder.pic); 
    } 

    @Override 
    public int getItemCount() { 
     return sliders.size(); 
    } 

    public class Holder extends RecyclerView.ViewHolder { 

     public TextView title; 
     public ImageView pic; 
     public String id=""; 
     CardView cardView; 

     public Holder(final View itemView) { 
      super(itemView); 

      // Enter your code 

     } 
    } 
} 
0

這裏是在主類

youradaptorvarialble.setOnItemClickListener(new BrandProductGridAdapter.OnItemClickListener() 
{ 
    @Override 
    public void clcik(int position) 
    { 
    // write you action here 
    // enter code here 
    } 
}); 
相關問題