2016-11-10 2 views
-1

J'ai un recyclerView et ses éléments contiennent un bouton. Et je veux obtenir la position de l'objet recyclé lorsque je clique sur le bouton. Voici le problème, lorsque le bouton a cliqué sur le bouton l'événement cliqué est déclenché mais que l'élément de recyclage sous neath ne l'est pas, l'événement cliqué ne peut pas passer par le bouton en haut de l'élément recyclerview. Comment puis-je obtenir cet événement click-through ou comment puis-je les lier ensemble? S'il vous plaît, dites-moi si vous connaissez la réponse.comment lier un élément RecyclerView et son bouton contenant un clic sur l'événement

mise à jour: Je n'ai trouvé aucun article similaire en ligne. Habituellement recyclerview contient le bouton est inscrit à différent OnclickedListener. Dans mon cas, ils doivent gérer le même auditeur, en particulier le recyclerview le gérer. Mais le bouton bloque simplement l'événement cliqué de recyclerview. voici le code viewholder: `GridViewAdapter public class étend RecyclerView.Adapter {

private final LinkedList<Device> mValues; 
    private final OnListFragmentInteractionListener mListener; 
    private OnLongClickListener mOnLongClickListener = null; 

    public GridViewAdapter(LinkedList<Device> items, OnListFragmentInteractionListener listener) { 
     mValues = items; 
     mListener = listener; 
    } 

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

    @Override 
    public void onBindViewHolder(final ViewHolder holder, int position) { 
     holder.mItem = mValues.get(position); 
//  holder.mIconView.setImageResource(R.drawable.ic_switch); 

     holder.mNameView.setText(holder.mItem.device_name()); 

     holder.mView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if (null != mListener) { 
        mListener.onDeviceClicked(holder.mItem); 
       } 
      } 
     }); 
    } 

    public void deleteByDeviceCode(int deviceCode) { 
     for(int i=0;i<mValues.size();i++) { 
      if (mValues.get(i).device_code() == deviceCode) { 
       mValues.remove(i); 
      } 
     } 
    } 

    public void deleteByPosition(int pos) { 
     mValues.remove(pos); 
    } 

    public int getDeviceCodeByPosition(int pos) { 
     return mValues.get(pos).device_code(); 
    } 

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

    public class ViewHolder extends RecyclerView.ViewHolder { 
     public final View mView; 
     public final Button mButton; 
     public final TextView mNameView; 
     public Device mItem; 

     public ViewHolder(View view) { 
      super(view); 
      mView = view; 
      mButton = (Button) view.findViewById(R.id.dev_button); 
      mNameView = (TextView) view.findViewById(R.id.dev_lable); 
     } 

     @Override 
     public String toString() { 
      return super.toString() + " '" + mNameView.getText() + "'"; 
     } 

    } 
}` 

Répondre

0

Lors de la création de supports vue, essayez de les faire passer l'index de l'élément représenté par eux, ou même référence à l'élément entier. Maintenant, lorsque vous recevez un événement click dans le conteneur de vue, avec l'événement lui-même, vous devez passer l'élément (index of) qui est représenté par ce support/ligne.

+0

problème est le titulaire de la vue n'a reçu aucun événement de clic s'il contient un bouton dans celui-ci. le bouton reçoit un événement de clic, le détenteur de recyclerview ne le fait pas. –

+0

ViewHolder lui-même _cannot_ reçoit un événement click, seules les vues peuvent le faire. Gardez la référence au bouton à l'intérieur du porte-vues, et vous devriez recevoir et gérer les événements de clic. Si vous voulez que l'élément WHOLE reçoive un clic, vous pouvez le pirater en cliquant sur la vue racine de l'élément et en l'attachant à un écouteur de clic comme s'il s'agissait d'un bouton. – SadClown