2017-08-12 24 views
1

私はリサイクルビューアダプターを使用していますが、addOnItemTouchListenerを実装して各行をリッスンしても問題ありません。android-OnClickListenerはリサイクルアダプター内のビューでは機能しません

しかし、私は自分の行の1つに2つのボタンがあり、それらのためにOnClickListenerを設定しましたが、トリガーされません。これは私のコードです:私は私のボタンのアンドロイドクリック可能に設定している

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

が、それは変更しませんでした:

<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

は –

+0

はあなたの全体のアダプタのコードやXMLのコードを投稿して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; 
    } 
}  

です。行全体が聴くように聞くので、同じ行の別のタッチイベントが影響を受けます。

子ごとに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ファイルからのクリックイベント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

を試してみてください内部ホルダー機能の例:

これはマイプロジ用のコードです

あなたが行ごとに TouchListenerを実装している言ったように、ここで
0

210は、メインクラスのすべての

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