如何在退出应用程序后杀死 Toast?

How to kill Toast after exit app?

需要一些帮助。我使用双击后退按钮退出带有 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();
}

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

我们无法在应用程序关闭时终止 toast。我们可以像下面的代码一样使用 toast。 Toast.LENGTH_SHORT).show(); 当您的应用程序关闭时,toast 持续时间减少。

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

或者,您可以通过以下代码设置 Duration of Toast:

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

    }

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

在此 class 中,您将管理 application 的每一个 toast,并且您可以决定是关闭还是显示它们。

我这样做是为了避开 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。

希望这对您有所帮助

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

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

我想这对我的应用程序来说已经足够了,它看起来很棒。 Tnx 阿布舍克·库马尔)