Есть ли какой-нибудь возможный способ автоматически закрыть снэк-бар Android (LENGTH_INDEFINITE) при подключении к Интернету без каких-либо действий?

Я отобразил снэк-бар Android с INDEFINITE LENGTH, но как закрыть снэк-бар без каких-либо действий или продолжительности, когда Интернет подключен. Я должен проверить, подключен ли интернет или нет. После этого интернет-закусочная будет автоматически закрыта без каких-либо действий или продолжительности. Если кто-нибудь знает, пожалуйста, помогите мне.

вот мой код

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

после вызова вышеупомянутого метода с использованием операции выглядит следующим образом

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

4 ответа

Я сделал этот синглтон сервисный класс. Он сохранил класс применения чистым и наилучшим для обеспечения удобства обслуживания закусочных.

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

Вы можете внести изменения в свой код следующим образом:

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

Сделайте еще один способ скрыть закусочную как

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

И в твоем состоянии

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

Вам просто нужно создать приемник трансляции и получить следующее событие<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/> и подпишитесь на него в вашей деятельности / фрагмент

Полная информация здесь http://developer.android.com/training/monitoring-device-state/connectivity-monitoring.html

Для тех, кто любит котлин, добавьте этот метод в свой класс Utils.

      fun showNoNetworkSnackBar(activity: Activity,message: String):Snackbar {
        val snackbar: Snackbar = Snackbar.make(
            activity.findViewById(android.R.id.content),
            message, Snackbar.LENGTH_INDEFINITE
        )

        return snackbar
    }

Тогда назовите это так

         val snackbar = Utils.showNoNetworkSnackBar(this,"No Internet")
   snackbar.show or snackbar.dismiss
Другие вопросы по тегам