应用程序关闭时如何停止显示来自Toast的消息?

时间:2013-02-11 05:54:04

标签: android toast

这是我的示例代码:

public class MainActivity extends Activity {

    Button buttonClick;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        buttonClick = (Button) findViewById(R.id.buttonClick);
        buttonClick.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                Toast.makeText(MainActivity.this, "Here is the Toast", Toast.LENGTH_SHORT).show();
            }
        });
    }

}

当我点击按钮时,会显示Toast消息。没关系。

我的问题是:

点击按钮上的 multiple times 然后关闭应用,然后 Toasts 继续开始显示工作消息。

我不想那样。

我想要关闭应用程序,然后Toasts也应该停止显示他们的消息。

有人可以告诉我我要为此做些什么吗?

5 个答案:

答案 0 :(得分:9)

  

我希望如果应用程序关闭,那么Toast也应该停止显示该消息。

在您的情况下,请致电cancel()Toast对象,以便在onDestroy()方法中将其取消。

以下是similar示例。

<强>已更新!

我测试了OP解决方案但没有结果。

.hide().cancel()方法适用于Toast,但似乎无效。解决方案是,您必须创建自己的自定义视图,其行为类似于Toast,然后您可以在Toasts完成时取消所有Activity

答案 1 :(得分:4)

存储对Toast对象的引用。在你的onDestroy中,如果toast不为null,则在其上调用cancel()。

答案 2 :(得分:3)

您可能希望在应用程序不可见时取消Toast,因此我会在方法'onStop()'上取消它。

这就是:

public class MainActivity extends Activity {
    private Toast toast = null;
    Button buttonClick;

    @SuppressLint("ShowToast")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        toast = Toast.makeText(getApplicationContext(), "", Toast.LENGTH_LONG);
        buttonClick = (Button) findViewById(R.id.buttonClick);
        buttonClick.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                toast.setText("My toast!");
                toast.show();
            }
        });
    }

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

}

修改:已更新,它现在应该像OP一样工作。

答案 3 :(得分:0)

在某些条件下尝试在finish()函数中使用OnCreate()。希望这会对你有所帮助。

答案 4 :(得分:0)

试试这个,

您可以取消使用此代码显示的Toast

  final Toast toast = Toast.makeText(getApplicationContext(), "This message will    disappear     in half second", Toast.LENGTH_SHORT);
toast.show();

Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
       @Override
       public void run() {
           toast.cancel(); 
       }
}, 500);