2017-10-10 5 views
0

En fait, je suis en train d'invoquer le Snack-bar de la classe Fragment, et le problème est sur la première fois est montré avec succès snackbar mais à temps les deuxième snackbar.dismis ne fonctionne pas code:snackbar.dismis ne fonctionne pas

Snackbar snackbar; View sbView; TextView textView; 
private void showSnackBar(Boolean bool) { 

    snackbar = Snackbar 
      .make(getView(), getResources().getString(R.string.set_pickup_time), Snackbar.LENGTH_INDEFINITE); 
    sbView = snackbar.getView(); 
    textView = sbView.findViewById(android.support.design.R.id.snackbar_text); 
    textView.setTextColor(Color.RED); 
    if (bool) 
     snackbar.show(); 
    else { 
      if (snackbar.isShown()) 
     snackbar.dismiss(); 
    } 
} 

et parfois je suis NPE quand je vérifie la if (snackbar.isShown())

+0

Où est 'show();'? –

Répondre

1

Chaque fois que vous créez un nouveau snack-bar et puis vérifier si elle est affichée sans le montrer. Vous devez déplacer votre code quelque chose comme ceci:

if (bool){ 

     snackbar = Snackbar.make(getView(), getResources().getString(R.string.set_pickup_time), Snackbar.LENGTH_INDEFINITE); 
     sbView = snackbar.getView(); 
     textView = sbView.findViewById(android.support.design.R.id.snackbar_text); 
     textView.setTextColor(Color.RED); 
     snackbar.show(); 

    }else if (snackbar!=null && snackbar.isShown()) 

      snackbar.dismiss(); 

    } 
0

Vous avez seulement besoin de créer un casse-croûte une fois.

Snackbar snackbar; View sbView; TextView textView; 
private void showSnackBar(Boolean bool) { 

if(snackbar == null) { 
    snackbar = Snackbar 
     .make(getView(), getResources().getString(R.string.set_pickup_time), Snackbar.LENGTH_INDEFINITE); 
    sbView = snackbar.getView(); 
    textView = sbView.findViewById(android.support.design.R.id.snackbar_text); 
    textView.setTextColor(Color.RED); 
} 

if (bool) 
    snackbar.show(); 
else { 
     if (snackbar.isShown()) 
    snackbar.dismiss(); 
} 
}