2016-04-05 7 views
1

私はRecyclerViewアダプターを持っています。他のRecyclerViewアダプターもあり、問題なくクリックされています。しかし、RecyclerViewアイテムの1つをクリックすると、トーストメッセージが表示されません。どうして?RecyclerViewをクリックしていません

public class AttendanceAdapter extends RecyclerView.Adapter { 
    //... 
    //other overridden factory methods of RecyclerView Adapter and //Constructors and data setting Methods 
    //... 

    public class AttendanceListViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 
     TextView rollNo, name; 
     ImageView isPreset; 

     public AttendanceListViewHolder(View itemView) { 
      super(itemView); 
      itemView.setOnClickListener(this); 

      // ... 
      // Layout Items initialization 
      // ... 
     } 

     @Override 
     public void onClick(View v) { 
      Toast.makeText(mContext,"reyclerViewClicked",Toast.LENGTH_LONG).show(); 
     } 
    } 
} 

EDIT:

マイitemView XMLは次のようになります。..

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_margin="10dp" 
    android:orientation="horizontal"> 
    <ScrollView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

    <LinearLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:orientation="horizontal" 
     android:weightSum="10" 
     android:padding="5dp"> 

     <TextView 
      android:id="@+id/roll_no_in_attendance_single_item" 

      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_gravity="center" 
      android:layout_weight="2" 
      android:textColor="@color/colorTeal" 
      android:textSize="18sp" 
      android:gravity="center" 
      android:fontFamily="sans-serif-condensed" 
      android:text="1" /> 


     <TextView 
      android:id="@+id/name_in_attendance_single_item" 
      android:layout_width="0dp" 
      android:layout_height="match_parent" 
      android:layout_gravity="center" 
      android:layout_weight="6" 
      android:textColor="@color/colorTeal" 
      android:textSize="18sp" 
      android:gravity="center" 
      android:fontFamily="sans-serif-condensed" 
      android:text="1" /> 


     <ImageView 
      android:layout_margin="10dp" 
      android:id="@+id/present_or_absent_toggle_in_attendance_single_item" 
      android:layout_width="0dp" 
      android:layout_height="wrap_content" 
      android:src="@mipmap/ic_check_circle_black_24dp" 
      android:tint="@color/colorTeal" 
      android:layout_weight="2" 

      android:text="1" /> 

    </LinearLayout> 
</ScrollView> 


</android.support.v7.widget.CardView> 
+0

itemviewはそれですか?あなたのitemview xmlコードを投稿してください –

+0

私は各項目をscrollviewに入れて間違っていました。私はitemViewを編集に投稿しました。おかげであなたは私の日を保存しました:) – erluxman

答えて

3

それ自身をスクロールします。

0

RecyclerView項目をクリックするためのユーティリティクラスを作成する方法を下回ることにより実施してください。

public class ItemClickSupport { 

    private final RecyclerView mRecyclerView; 

    private OnItemClickListener mOnItemClickListener; 

    private OnItemLongClickListener mOnItemLongClickListener; 

    private View.OnClickListener mOnClickListener = new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (mOnItemClickListener != null) { 
       RecyclerView.ViewHolder holder = mRecyclerView.getChildViewHolder(v); 
       mOnItemClickListener.onItemClicked(mRecyclerView, holder.getAdapterPosition(), v); 
      } 
     } 
    }; 
    private View.OnLongClickListener mOnLongClickListener = new View.OnLongClickListener() { 
     @Override 
     public boolean onLongClick(View v) { 
      if (mOnItemLongClickListener != null) { 
       RecyclerView.ViewHolder holder = mRecyclerView.getChildViewHolder(v); 
       return mOnItemLongClickListener.onItemLongClicked(mRecyclerView, holder.getAdapterPosition(), v); 
      } 
      return false; 
     } 
    }; 
    private RecyclerView.OnChildAttachStateChangeListener mAttachListener 
      = new RecyclerView.OnChildAttachStateChangeListener() { 
     @Override 
     public void onChildViewAttachedToWindow(View view) { 
      if (mOnItemClickListener != null) { 
       view.setOnClickListener(mOnClickListener); 
      } 
      if (mOnItemLongClickListener != null) { 
       view.setOnLongClickListener(mOnLongClickListener); 
      } 
     } 

     @Override 
     public void onChildViewDetachedFromWindow(View view) { 

     } 
    }; 

    private ItemClickSupport(RecyclerView recyclerView) { 
     mRecyclerView = recyclerView; 
     mRecyclerView.setTag(R.id.item_click_support, this); 
     mRecyclerView.addOnChildAttachStateChangeListener(mAttachListener); 
    } 

    public static ItemClickSupport addTo(RecyclerView view) { 
     ItemClickSupport support = (ItemClickSupport) view.getTag(R.id.item_click_support); 
     if (support == null) { 
      support = new ItemClickSupport(view); 
     } 
     return support; 
    } 

    public static ItemClickSupport removeFrom(RecyclerView view) { 
     ItemClickSupport support = (ItemClickSupport) view.getTag(R.id.item_click_support); 
     if (support != null) { 
      support.detach(view); 
     } 
     return support; 
    } 

    public ItemClickSupport setOnItemClickListener(OnItemClickListener listener) { 
     mOnItemClickListener = listener; 
     return this; 
    } 

    public ItemClickSupport setOnItemLongClickListener(OnItemLongClickListener listener) { 
     mOnItemLongClickListener = listener; 
     return this; 
    } 

    private void detach(RecyclerView view) { 
     view.removeOnChildAttachStateChangeListener(mAttachListener); 
     view.setTag(R.id.item_click_support, null); 
    } 

    public interface OnItemClickListener { 

     void onItemClicked(RecyclerView recyclerView, int position, View v); 
    } 

    public interface OnItemLongClickListener { 

     boolean onItemLongClicked(RecyclerView recyclerView, int position, View v); 
    } 
} 

あなたactivityfragmentでこのようにそれを使用しています。

ItemClickSupport.addTo(mRecyclerView).setOnItemClickListener(new ItemClickSupport.OnItemClickListener() { 
    @Override 
    public void onItemClicked(RecyclerView recyclerView, int position, View v) { 
     // your code here 
     Toast.makeText(mContext,"reyclerViewClicked",Toast.LENGTH_LONG).show(); 
    } 
}); 

この図に示すように、blog

+0

なぜ落選ですか?これは 'itemView'の中で特に' View'ではなく 'itemView'全体にリスナーを設定しようとしているので、' RecyclerView'の 'OnItemClickListener'のためにあります。 – Omkar

0

item_view.xmlファイルがあるとします。主なレイアウトはLinearLayoutです。そのためにはidと定義してください。私は

RecyclerViewので、

RecyclerView

項目にスクロールビューを使用してはならない一つ

、各項目内ScrollViewを使って(無意識の)ミスをした:解決

public class AttendanceListViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 
    LinearLayout rootView; 
    TextView rollNo, name; 
    ImageView isPreset; 

    public AttendanceListViewHolder(View itemView) { 
     super(itemView); 
     rootView = (LinearLayout)itemView.findViewById(R.id.root_view); 
     rootView.setClickable(true); 
     rootView.setOnClickListener(this); 

     // ... 
     // Layout Items initialization 
     // ... 
    } 

    @Override 
    public void onClick(View v) { 
     Toast.makeText(mContext,"reyclerViewClicked",Toast.LENGTH_LONG).show(); 
    } 
} 
+0

は動作しません – erluxman

関連する問題