2016-07-03 4 views
0

J'ai CardViews dans une liste ReyclerView. J'ai mis en place de sorte qu'un LongClick sur un CardView lance un DialogFragment. Sur la CardView est une case à cocher et je veux exclure la case à cocher de la méthode LongClick; c'est-à-dire que je ne veux pas que le DialogFragment se charge si la case à cocher est LongClicked. J'ai ajouté 'android: longClickable = "false"' et 'android: focusable = "false"' à la disposition de CardView mais cela n'a pas fonctionné. Comment pourrais-je réaliser?Android: comment exclure une case de CardView d'une méthode LongClick?

Adapter file:  
... 
public static class ListViewHolder extends RecyclerView.ViewHolder implements View.OnLongClickListener { 

    CardView singleCardView; 

    TextView cardBlankText1; 
    TextView cardBlankTextNumstotal; 
    CheckBox chkSelected; 
    TextView cardBlankText2; 
    TextView cardBlankText4; 
    TextView cardBlankText5A; 
    TextView cardBlankText5B; 
    TextView cardBlankText6; 
    TextView cardBlankText7; 
    TextView cardBlankText8; 

    public ListViewHolder(View itemView) { 
     super(itemView); 

     itemView.setOnLongClickListener(this); 
     singleCardView = (CardView) itemView.findViewById(R.id.singlecard_view1); 

     chkSelected = (CheckBox) itemView.findViewById(R.id.chkSelected); 
     cardBlankText1 = (TextView) itemView.findViewById(R.id.cardBlankText1); 
     cardBlankTextNumstotal = (TextView) itemView.findViewById(R.id.cardBlankTextNumstotal); 
     cardBlankText2 = (TextView) itemView.findViewById(R.id.cardBlankText2); 
     cardBlankText4 = (TextView) itemView.findViewById(R.id.cardBlankText4); 
     cardBlankText5A = (TextView) itemView.findViewById(R.id.cardBlankText5A); 
     cardBlankText5B = (TextView) itemView.findViewById(R.id.cardBlankText5B); 
     cardBlankText6 = (TextView) itemView.findViewById(R.id.cardBlankText6); 
     cardBlankText7 = (TextView) itemView.findViewById(R.id.cardBlankText7); 
     cardBlankText8 = (TextView) itemView.findViewById(R.id.cardBlankText8); 

     chkSelected.setOnLongClickListener(new View.OnLongClickListener() { 
      @Override 
      public boolean onLongClick (View view){ 
       return true; 
      } 
     }); 
    } 
    @Override 
    public boolean onLongClick(View view) { 
     clickListener.onItemLongClick(getAdapterPosition(), view); 
     return false; 
    } 
} 

public void setonItemClickListener(ClickListener clickListener) { 
    ListAdapter.clickListener = clickListener; 
} 

public interface ClickListener { 
    void onItemLongClick(int position, View view); 
} 

Répondre

1

Activez la case à cocher et définissez un objet OnLongClickListener vide. Cela consommera l'événement et empêchera le parent CardView de l'obtenir:

View checkbox = container.findViewById(R.id.checkbox); 

checkbox.setOnLongClickListener(new View.OnLongClickListener() { 
    @Override 
    public boolean onLongClick(View view) { 
     //make sure to return true here so the parent cardview doesn't get the event. 
     return true; 
    } 
}); 
+0

Ok, va essayer. Si je l'ai configuré dans ViewHolder de RecyclerView, Android Studio affiche le message d'erreur "Impossible de résoudre le symbole" conteneur "". S'il vous plaît donnez votre avis. – AJW

+0

'container' était le nom que j'avais donné à la disposition de votre CardView. Si vous êtes dans un adaptateur et que vous configurez ViewHolder, vous pouvez remplacer 'container' par la variable correspondant à la mise en page que vous y déploierez. –

+0

app s'écroule, Studio n'aime pas la ligne "View checkbox ...". Je vais poster le code complet de l'adaptateur ci-dessus, savez-vous ce que je manque? – AJW