【问题标题】:How to kill Toast after exit app?退出应用程序后如何杀死Toast?
【发布时间】:2018-02-01 13:54:41
【问题描述】:

需要帮助。我用 Toast 和下一个代码双击后退按钮退出应用程序:

@Override
public void onBackPressed() {
    if (back_pressed + 2000 > System.currentTimeMillis()) {
        super.onBackPressed();
    } else {
        Toast.makeText(getBaseContext(), "Нажмите еще раз для выхода", Toast.LENGTH_SHORT).show();
    }

    back_pressed = System.currentTimeMillis();
}

在 stackoverflow 上找到了该片段代码。我想这是解决问题的最佳方法。但是有一个例外 - 退出应用程序后吐司仍在屏幕上。当用户单击两次返回按钮并关闭应用程序时如何杀死 toast?

【问题讨论】:

    标签: android toast android-toast


    【解决方案1】:

    当应用程序关闭时,我们不能杀死 toast。我们可以像下面的代码一样使用 toast。 Toast.LENGTH_SHORT).show(); 应用关闭时吐司的持续时间减少。

    Toast.makeText(this, "Press again to exit.. ", Toast.LENGTH_SHORT).show();
    

    或者,您可以通过以下代码设置DurationToast

    Toast toast = Toast.makeText(getApplicationContext(), "Press again to exit..", Toast.LENGTH_SHORT);
    
    toast.show();
    
    Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
     @Override
     public void run() {
     toast.cancel(); 
     }
    }, 500);
    

    或者,你可以使用这个:

      private Toast toast = null;
      toast = Toast.makeText(getApplicationContext(), "", Toast.LENGTH_SHORT);
    
       @Override
        public void onBackPressed() {
            if (doubleBackToExitPressedOnce) {
                super.onBackPressed();
                return;
            }
            this.doubleBackToExitPressedOnce = true;
            //Toast.makeText(this, "Press again to exit..", Toast.LENGTH_SHORT).show();
            toast.setText("Press again to exit..");
            toast.show();
            new Handler().postDelayed(new Runnable() {
    
                @Override
                public void run() {
                    doubleBackToExitPressedOnce=false;
                }
            }, 2000);
        }
    
    
        @Override
        protected void onStop () {
            super.onStop();
            toast.cancel();
    
        }
    

    【讨论】:

    • if (toast != null) toast.cancel();
    【解决方案2】:

    您应该能够通过使用helper class 来实现您的目标。在我的应用程序中,我称之为ToastManager

    在本课程中,您将管理application 的每一个祝酒词,您可以决定是关闭它们还是显示它们。

    我这样做是为了避免 Toast 队列,当显示另一个时,我将关闭 Toast

    您可以像下面这样实现它并在您的自定义applicationActivity 中调用dismissToast method

    public class ToastManager {
        private static Toast m_currentToast;
    
        public static void showToast(Context ctx, String text)
        {
            try {
                if (m_currentToast != null) {
                    m_currentToast.cancel();
                }
                m_currentToast = Toast.makeText(ctx, text, Toast.LENGTH_LONG);
                m_currentToast.show();
            }catch(Exception ex){
                ex.printStackTrace();
            }
        }
    
        public static void dismissToast(){
          if(m_currentToast != null){
            m_currentToast.cancel();
          }
        }
    }
    

    您必须通过调用 showToast 方法来创建每个 tost。

    希望对你有帮助

    【讨论】:

    • 当然,这是管理吐司的好解决方案,谢谢。我期待着实现它,但现在我有了一个简单的设计来解决我的问题。
    【解决方案3】:

    下一个代码在关闭应用程序后立即擦除吐司:

    @Override
        protected void onStop () {
            toast.cancel();
            super.onStop();
        }
    

    我想这对我的应用程序来说已经足够了,它看起来很棒。 Tnx Abhishek kumar)

    【讨论】:

    • 这里有一个时刻:使用主页按钮退出应用程序后,您将收到一个错误,除非您检查您的 toast if (toast != null) toast.cancel();
    • 你遇到了什么问题?
    • toast.cancel(); - 如果 toast 不存在,此方法将抛出 nullpointerException。所以我们需要在调用之前检查它是否为空。如果您没有按后退按钮,则永远不会创建 toast。
    • 对 toast 进行验证
    猜你喜欢
    • 1970-01-01
    • 2016-06-12
    • 1970-01-01
    • 1970-01-01
    • 2020-10-23
    • 1970-01-01
    • 1970-01-01
    • 2015-05-10
    • 1970-01-01
    相关资源
    最近更新 更多