2016-01-31 4 views
-1

J'ai affiché la barre de snack android avec INDEFINITE LONGUEUR mais comment fermer le casse-croûte avec n'importe quelle action ou durée pendant que l'Internet s'est connecté. Je dois vérifier internet connecté ou pas. Après internet connecté snack-bar sera fermé automatiquement sans aucune action ou la durée.Si quelqu'un sait bien m'aider.Existe-t-il un moyen de fermer automatiquement la barre-snack android (LENGTH_INDEFINITE) automatiquement alors que l'Internet est connecté sans aucune action?

ici est mon code

public static void snack (HashMap<String,View.OnClickListener> actions,int priority,String message,Activity context){ 
Snackbar B = Snackbar.make(context.findViewById(android.R.id.content), message, Snackbar.LENGTH_LONG); 
if(actions!=null){ 
Iterator iterator = actions.entrySet().iterator(); 
    B.setDuration(Snackbar.LENGTH_INDEFINITE); 
while (iterator.hasNext()) { 
    Map.Entry pair = (Map.Entry)iterator.next(); 
    B.setAction((String)pair.getKey(),(View.OnClickListener)pair.getValue()); 
    iterator.remove(); // avoids a ConcurrentModificationException 
}} 
switch (priority) 
{ 
    case 0: 
     B.getView().setBackgroundColor(context.getResources().getColor(R.color.color_pinkbutton)); 
     break; 
    case 1: 
     B.getView().setBackgroundColor(Color.parseColor("#66ccff")); 
     break; 
    case 2: 
     B.getView().setBackgroundColor(Color.parseColor("#66ff33")); 
     break; 
} 
B.show(); 

après avoir appelé la méthode mentionnée ci-dessus en utilisant l'activité est la suivante

If (NetworkCheck.isNetworkAvailable(this) == false) { MyApplication.snack(null, 0, "Network Connection failed.",class.this);else

Répondre

1

Vous pouvez apporter des modifications à votre code comme suit:

Snackbar B; //make it as global 

    public static void snack (HashMap<String,View.OnClickListener> actions,int priority,String message,Activity context){ 
     B = Snackbar.make(context.findViewById(android.R.id.content), message, Snackbar.LENGTH_LONG); 
     if(actions!=null){ 
     Iterator iterator = actions.entrySet().iterator(); 
     B.setDuration(Snackbar.LENGTH_INDEFINITE); 
     while (iterator.hasNext()) { 
     Map.Entry pair = (Map.Entry)iterator.next(); 
     B.setAction((String)pair.getKey(),(View.OnClickListener)pair.getValue()); 
     iterator.remove(); // avoids a ConcurrentModificationException 
     }} 
     switch (priority){ 
     case 0: 
       B.getView().setBackgroundColor(context.getResources().getColor(R.color.color_pinkbutton)); 
      break; 
     case 1: 
      B.getView().setBackgroundColor(Color.parseColor("#66ccff")); 
      break; 
     case 2: 
      B.getView().setBackgroundColor(Color.parseColor("#66ff33")); 
      break; 
    } 
    B.show(); 

Faire une autre méthode pour cacher snackbar comme

private static hideSnackbar(){ 
    if(B !=null && B.isShown()){ 
      B.dismiss(); 
    } 
} 

Et dans votre état

If (NetworkCheck.isNetworkAvailable(this) == false) { 
    MyApplication.snack(null, 0, "Network Connection failed.",class.this) 
}else{ 
    MyApplication.hideSnackbar(); 
} 
+0

Merci pour votre réponse. mais Dans la même activité internet déconnecté snack-bar affiché. après Internet connecté dans la même page snack non fermé – RAMESH

+0

pouvez-vous me montrer le code comment vous le faites ??? éditez votre question et collez le code ici – Pankaj

+0

J'ai mentionné le code merci de le vérifier – RAMESH

0

Vous devez simplement créer récepteur de radiodiffusion et de recevoir l'événement suivant <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/> et abonnez-vous à ce sujet dans votre activité/fragment

information complète est ici http://developer.android.com/training/monitoring-device-state/connectivity-monitoring.html

+0

Merci. Je vais mettre en œuvre selon votre scénario – RAMESH

+0

Récepteur broadcase J'ai mis en œuvre mais pas travaillé.J'ai mentionné le code ci-dessus. – RAMESH

4

J'ai créé cette classe utilitaire singleton. Il a maintenu la classe d'application plus propre et la meilleure pour la maintenabilité future des barres de collation.

public class SnackBarUtils { 
    private static SnackBarUtils mInstance = null; 
    private Snackbar mSnackBar; 

    private SnackBarUtils() { 

    } 

    public static SnackBarUtils getInstance() { 
     if (mInstance == null) { 
      mInstance = new SnackBarUtils(); 
     } 
     return mInstance; 
    } 

    public void hideSnackBar() { 
     if (mSnackBar != null) { 
      mSnackBar.dismiss(); 
     } 
    } 

    public void showProblemSnackBar(final Activity activity, final String message) { 
     mSnackBar = Snackbar.make(activity.findViewById(android.R.id.content), message, Snackbar.LENGTH_INDEFINITE); 
     // Changing action button text color 
     View sbView = mSnackBar.getView(); 
     TextView textView = (TextView) sbView.findViewById(android.support.design.R.id.snackbar_text); 
     textView.setTextColor(Color.YELLOW); 
     mSnackBar.show(); 
    } 
} 
+0

Il ne ferme pas le 'snackbar' quand j'appelle la méthode' hideSnackBar() '. – Shambhu