2016-04-05 18 views
1

Ich habe einen RecyclerView Adapter. Ich habe auch andere RecyclerView Adapter und sie werden ohne Problem angeklickt. Wenn ich jedoch auf einen der Artikel RecyclerView klicke, wird die Nachricht nicht angezeigt. Warum?RecyclerView wird nicht angeklickt

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:

Meine itemView XML wie folgt aussieht ..

<?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 ist es custome Ansicht? dann poste bitte deinen itemview xml code –

+0

Danke, dass ich mich für das Einfügen jedes Elements in scrollview gequält habe, ich habe das itemView in der Bearbeitung gepostet, Danke, dass du meinen Tag gerettet hast :) – erluxman

Antwort

3

Gelöst: Ich habe einen Fehler (unwissentlich) aus innerhalb jedes Element mit Scrollview,

Man darf nicht Scroll Blick in

RecyclerView

Artikel verwenden, da

RecyclerView Scrollt sich selbst.

0

Versuchen Sie unter Methode erstellen Utility-Klasse für RecyclerView Artikel klicken Umsetzung von.

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); 
    } 
} 

Verwendung es so in Ihrem activity oder fragment.

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(); 
    } 
}); 

Wie in dieser blog gezeigt.

+0

Warum down vote? Dies ist bei "OnItemClickListener" für "RecyclerView" der Fall, da er versucht, den Listener auf das gesamte "itemView" und nicht auf "View" innerhalb von "itemView" einzustellen. – Omkar

0

Sagen wir, Sie haben eine item_view.xml Datei. Und Ihr Hauptlayout ist LinearLayout. Definieren Sie einfach eine ID dafür.

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

funktioniert nicht – erluxman

Verwandte Themen