4

我已经展示了具有INDEFINITE LENGTH的 android 小吃店,但是如何在 Internet 连接时在没有任何操作或持续时间的情况下关闭小吃店。我必须检查互联网连接与否。连接互联网的小吃店将自动关闭,无需任何操作或持续时间。如果有人知道请帮助我。

这是我的代码

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

4 回答 4

10

我已经制作了这个单例实用程序类。它使应用程序类更清洁,并且最适合小吃店的未来可维护性。

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();
    }
}
于 2016-09-07T15:53:41.833 回答
1

您可以在代码中进行如下更改:

   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();
}
于 2016-01-31T06:51:02.323 回答
0

您应该只创建广播接收器并接收以下事件 <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>并在您的活动/片段中订阅它

完整信息在这里http://developer.android.com/training/monitoring-device-state/connectivity-monitoring.html

于 2016-01-31T06:56:00.167 回答
0

对于 kotlin 人,将此方法添加到您的 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
于 2021-02-25T01:52:18.877 回答