我有一个按钮,点击按钮后会出现toast提示,如果用户多次点击按钮并转到上一个活动甚至关闭应用程序,toast提示仍然可见。
如何在用户转到任何其他活动时完成或取消toast提示,或者如何防止生成toast提示?
Toast.makeText(getApplicationContext(), "Enter correct goal!",
Toast.LENGTH_SHORT).show()
我有一个按钮,点击按钮后会出现toast提示,如果用户多次点击按钮并转到上一个活动甚至关闭应用程序,toast提示仍然可见。
如何在用户转到任何其他活动时完成或取消toast提示,或者如何防止生成toast提示?
Toast.makeText(getApplicationContext(), "Enter correct goal!",
Toast.LENGTH_SHORT).show()
使用handler
尝试通过cancel()
取消Toast
Toast toast = Toast.makeText(getApplicationContext(), "Test", Toast.LENGTH_SHORT);
toast.show();
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
toast.cancel();
}
}, 500);
Toast
对象上调用cancel()
来取消单个Toast
。据我所知,目前没有办法取消所有未完成的Toast
。finish()
时,将执行onDestroy()
方法,该方法可以执行以下操作:onDestroy()
不是析构函数。它并不会真正销毁对象。它只是基于某种状态调用的方法。因此,在超类的onDestroy()
运行并返回后,您的实例仍然存在且非常健康。Android会保留进程,以防用户想要重新启动应用程序,这使得启动阶段更快。如果进程不做任何事情,并且需要回收内存,则会杀死该进程。Toast
对象,并在onDestroy()
方法中调用cancel()
。Class YourClassActivity extends Activity{
private static Toast toast;
public void initToast(){
if (toast != null)
toast.cancel();
toast = Toast.makeText(MainActivity.this,"text",Toast.LENGTH_SHORT);
toast.setText("Enter correct goal!");
toast.setDuration(Toast.LENGTH_SHORT);
toast.show();
}
@Override
public void onDestroy() {
super.onDestroy();
if (toast != null)
toast.cancel();
}
@Override
protected void onStop(){
super.onStop();
if (toast != null)
toast.cancel();
}
}
在您的Button
点击事件中调用initToast()
方法。
Toast
是与其上下文无关的。
你可以使用替代方案(AppMsg、Crouton或新的SnackBar),或者在Activity.onPause()
中保留对Toast
的引用并cancel()
它。