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

时间:2018-02-01 13:54:42

标签: android toast android-toast

需要一些帮助。我使用后退按钮双击退出按钮与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找到片段代码。我想这是问题的最佳解决方案。但有一个ecxeption - 退出应用程序后仍然在屏幕上吐司。用户单击两次后退按钮并关闭应用程序时如何终止吐司?

3 个答案:

答案 0 :(得分:2)

申请结束时,我们无法杀死吐司。我们可以像下面的代码一样使用吐司。当您的应用关闭时,Toast.LENGTH_SHORT).show();托饼的持续时间会缩短。

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

或者,您可以通过以下代码设置Duration 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();

    }

答案 1 :(得分:1)

您应该可以使用helper class达到目标。在我的应用程序中,我称之为ToastManager

在本课程中,您将管理application的每个祝酒词,然后您可以决定是否解雇或展示它们。

我这样做是为了避免Toast队列,当我显示另一个时,我正在解雇Toast

您可以按照以下方式实施,并在自定义dismissToast methodapplication中拨打Activity

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

Obv你必须通过调用showToast方法创建每个tost。

希望这会有所帮助

答案 2 :(得分:1)

关闭申请后,下一个代码立即擦除吐司:

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

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