2016-10-08 5 views
0

私はrecyclerviewの画像にonClickListenerを設定しようとしていますが、クリックは機能しません。onClickListenerが動作していないAndroid Recyclerビュー

私はリスナー上のデバッガの "ポイント"を設定すると、ポイントに移動しないので、それはonClickListenerが見えないようです。

私は間違っていますか?

public class Item_List_Adapter extends RecyclerView.Adapter<Item_List_Adapter.MyViewHolder> { 
     // declare array 
     private String[] mDataset; 
     private Context mContext; 

     public static class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{ 
      public TextView itemName; 
      public ImageView mAddBtn; 

      public MyViewHolder(View v){ 
       super(v); 

       itemName = (TextView) v.findViewById(R.id.item_name); 
       mAddBtn = (ImageView) v.findViewById(R.id.action_add); 
      } 

      @Override 
      public void onClick(View v) { 
       System.out.println("TEST: "); 
       switch (v.getId()) { 
        case R.id.action_add: 
         System.out.println("TEST2: "); 
         break; 
        default: 
         break; 
       } 
      } 
     } 

     // constructor 
     public Item_List_Adapter(Context context, String[] myDataset) { 
      mDataset = myDataset; 
      mContext = context; 
     } 

     @Override 
     public int getItemCount() { 
      return mDataset.length; 
     } 

     @Override 
     public Item_List_Adapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
      // create a new view 
      View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_list, parent, false); 
      MyViewHolder nv = new MyViewHolder(v); 
      return nv; 
     } 

     @Override 
     public void onBindViewHolder(Item_List_Adapter.MyViewHolder holder, final int position) { 
      holder.itemName.setText(mDataset[position]); 

      holder.mAddBtn.setOnClickListener(holder); 

     } 
    } 

と私のXMLは1つがリサイクルビューで事前に

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="horizontal" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:paddingTop="10dp" 
    android:paddingBottom="10dp"> 

    <LinearLayout 
     android:id="@+id/list_item" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" 
     android:layout_marginEnd="15dp" 
     android:layout_marginStart="15dp"> 

     <ImageView 
      android:id="@+id/action_check" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:src="@drawable/ic_action_check" 
      android:alpha="0.3" 
      /> 

     <TextView 
      android:id="@+id/item_name" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:layout_weight=".2" 
      android:hint="Wine" 
      android:alpha="0.3" 
      android:gravity="start|center" 
      android:paddingStart="5dp" 
      android:paddingLeft="5dp"/> 

     <ImageView 
      android:id="@+id/action_remove" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:src="@drawable/ic_action_remove_green" 
      android:onClick="item_remove" 
      /> 
     <ImageView 
      android:id="@+id/action_add" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:src="@drawable/ic_action_add_blue" 
      /> 
     <ImageView 
      android:id="@+id/action_chart" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:src="@drawable/ic_action_chart" 
      android:scaleType="centerInside" 
      android:onClick="chart_detail" 
      /> 

    </LinearLayout> 

</LinearLayout> 

感謝を膨らまファイル

+4

へのonClickリスナを割り当てる: 'holder.mAddBtn.setOnClickListener(ホルダー)'と何あなたの 'MyViewHolder' – pskink

+0

に' OnClickListener'インターフェイスを実装あなた手段 ?私がこれを書いていると、ViewのsetOnclickListener(android.view.View.OnClickListener)を(com.app.pierre.myapp.adapter.Item_List_Adapter.MyViewHolder)に適用できません。 – Pierre

+0

viewholderコンストラクタにonclicklistenerを追加しようとしました;) –

答えて

0

あなたは、実験のために、コンソール

Log.d("TAG","TEST:); 

に出力するログを使用する必要がありますあなたのViewHolderコンストラクタでこれを試してください。

mAddBtn.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Log.d("TAG","TEST:); 
     } 
    }); 

それがその後、何かは以下の通りです、これは単にXMLで=「true」をクリック可能に設定、またはビュー

+0

あなたの答えをありがとう、何もログに表示されません。私はすでにxmlからclickable = trueをすべて削除しています。クリック以外の何がブロックできますか? – Pierre

+0

私の質問に私のXMLを追加しました。 – Pierre

+0

あなたはandroid:xmlのonClick行なしで試してみることができます –

0

の前にあるものを考え出すことができ、クリックをブロックしている動作しない場合私のアダプターでどう使いましたか?このヘルプを期待してください:

public class EventArrayAdapter extends RecyclerView.Adapter<ViewHolder> { 
     private OnItemClickListener onItemClickListener; 
     public OnItemClickListener getOnItemClickListener() { 
      return onItemClickListener; 
     } 

     public void setOnItemClickListener(OnItemClickListener onItemClickListener) { 
      this.onItemClickListener = onItemClickListener; 
     } 

     public interface OnItemClickListener { 
      public void onItemClick(View view, int position); 
     } 

     @Override 
     public void onBindViewHolder(final ViewHolder holder, final int position) { 
     //Add your viewHolder.button.setOnClickListener here as normal 
     } 

     @Override 
     public ViewHolder onCreateViewHolder(ViewGroup parent, int arg1) { 
      // TODO Auto-generated method stub 
      View v = LayoutInflater.from(context).inflate(
        R.layout.layout_item_event, parent, false); 
      final EventViewHolder holder = new EventViewHolder(v); 
      v.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        // TODO Auto-generated method stub 
        onItemClickListener.onItemClick(v, holder.getAdapterPosition()); 
       } 
      }); 
      return holder; 
     } 
    } 
0

このようなコンストラクタを更新してみてください。それが動作します。

public MyViewHolder(View v){ 
      super(v); 

      itemName = (TextView) v.findViewById(R.id.item_name); 
      mAddBtn = (ImageView) v.findViewById(R.id.action_add); 

      mAddBtn.setOnClickListener(this);  
     } 

基本的にはこのようにそれを使用することをお勧めしますあなたのImageViewの

関連する問題