问题 应用程序关闭时如何停止显示来自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也应该停止显示他们的消息。 

谁能告诉我我要做什么呢???


3170
2018-02-11 05:54


起源

您可以在关闭应用时执行此操作: stackoverflow.com/questions/4395062/how-to-cancel-toast - aldo.roman.nurena
可能重复 Android退出应用程序时以及正在显示toast时取消Toast - Richard Le Mesurier


答案:


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

在你的情况下打电话 cancel() 至 Toast 对象取消它 onDestroy() 方法。

这里有一个 类似 例。

更新!

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

.hide() 和 .cancel() 方法可用 Toast 但似乎他们没有工作。解决方案是,您必须创建自己的自定义视图,其行为类似于 Toast 然后你可以全部取消 Toasts 当。。。的时候 Activity 饰面。


9
2018-02-11 06:00



真正的男人。好的答案。 - kyogs
是否有必要创建自定义视图以仅取消Toast。我认为这似乎不是一个好的选择。 - Narendra Pal
你没有任何其他选择。 - RobinHood
@RobinHood你的第一个答案是正确的,所以+1。您可以 .cancel() 一个 Toast 可以在相关文章中看到 这里。代码很好,已经生产多年了。 - Richard Le Mesurier


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


4
2018-02-11 05:59



如何存储Toast对象的引用。吐司是静态的。我无法理解它 - Narendra Pal
不,不是。 Toast.makeText返回Toast类型的实例。保存。这就是你需要取消的东西。 - Gabe Sechan


您可能希望在应用程序不可见时取消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
2018-02-11 06:08



它没有工作,经过测试! - RobinHood
您正在测试按下按钮多次然后更改应用程序?这将保存对最后一个Toast的引用,以便取消最后一个Toast。也许你想取消以前的祝酒词,如果它们仍然可见,这样他们就不会继续堆叠 - Juan Andrés Diana
我编辑它以便它取消以前的Toasts。 - Juan Andrés Diana
那点!当活动不仅关闭最后一个活动时,OP想要取消所有的吐司。 - RobinHood
好吧它应该现在可以工作,但是当应用程序运行时,toast不会堆叠。无论如何,大多数人都会期待这种行为。 - Juan Andrés Diana


尝试这个,

你可以取消 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);

0
2018-02-11 05:59





尝试使用 finish() 在你的 OnCreate() 在某些条件下起作用。希望这会帮助你。


0
2018-02-11 05:59



bhai ...很好的bhai ... - Hara Hara Mahadevaki