有没有办法在没有任何动作的情况下连接互联网时自动关闭android snackbar(LENGTH_INDEFINITE)?

时间:2016-01-31 06:13:00

标签: android android-snackbar snackbar

我已经用 INDEFINITE LENGTH 显示了android小吃店,但是如何在互联网连接时关闭小吃店,没有任何动作或持续时间。我必须检查互联网连接与否。之后互联网小吃店将自动关闭,无任何行动或持续时间。如果有人知道,请帮助我。

这是我的代码

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 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分: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();
}

答案 2 :(得分:0)

您应该创建广播接收器并接收以下事件 public static void main(String[] args) throws Exception { Neo4jConnection connect = (Neo4jConnection) DriverManager.getConnection("jdbc:neo4j://localhost:7474","neo4j","Neo4J"); final PreparedStatement statement = connect.prepareStatement("MATCH (n:USER) RETURN n LIMIT 25"); final ResultSet result = statement.executeQuery(); System.out.println(result.getFetchSize()); result.close(); statement.close(); connect.close(); } 并在您的活动/片段中订阅

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

答案 3 :(得分: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