是否有任何可能的方法可以在没有任何操作的情况下在互联网连接时自动关闭 android 小吃店(LENGTH_INDEFINITE)?

Posted

技术标签:

【中文标题】是否有任何可能的方法可以在没有任何操作的情况下在互联网连接时自动关闭 android 小吃店(LENGTH_INDEFINITE)?【英文标题】:Is there any possible way to close android snackbar (LENGTH_INDEFINITE)automatically while internet connected without any action? 【发布时间】:2016-05-08 17:57:58 【问题描述】:

我已经展示了带有 INDEFINITE LENGTHandroid 小吃店,但是如何在 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();

使用activity调用上述方法后如下

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

当我调用方法hideSnackBar()时它不会关闭snackbar 仅供参考,为了清楚起见,您应该包括用例:SnackBarUtils.getInstance().showProblemSnackBar(activity, msg)SnackBarUtils.getInstance().hideSnackBar()【参考方案2】:

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

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

【讨论】:

感谢您的回答。但在同一个活动中显示了断网的小吃店。上网后在同一页面小吃店未关闭 你能告诉我你是怎么做的代码吗???编辑您的问题并将代码粘贴到那里 我已经按照你的代码实现了。问题是当我断开网络连接时,没有显示相同的活动。【参考方案3】:

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

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

【讨论】:

谢谢。我会根据你的情况实施 broadcase receiver我已经实现但是没用。上面的代码我已经提到了。【参考方案4】:

对于 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

【讨论】:

以上是关于是否有任何可能的方法可以在没有任何操作的情况下在互联网连接时自动关闭 android 小吃店(LENGTH_INDEFINITE)?的主要内容,如果未能解决你的问题,请参考以下文章

没有抽象方法的抽象类

当前的 Windows Phone 8.1 应用程序是不是可以在没有任何代码修改的情况下在 Windows 10 移动设备上运行?

是否可以在不做任何更改的情况下在 Android 手机中运行 JavaFX 桌面应用程序? [复制]

默认情况下在我的 android 应用中启用所有通知设置

ARCore – 如何在没有任何特征点的情况下在墙壁等表面上放置/创建对象?

是否可以在没有鼠标的情况下在 zathura 中选择文本?