我有不同的按钮来触发不同的toast;都是由onClick或onLongClick触发的。我在OnCreate方法中初始化了所有toast消息。我决定创建一个全局吐司,这样每次我想要显示一个吐司时,我都会说if(toast != null) toast.cancel()
,然后说toast = exampleToast;
toast.show;
,这样就避免了吐司排队,并且在显示新的吐司之前,可以很容易地取消正在显示的任何吐司。
我的问题是,在相同的toast应该出现的次数与我单击其按钮的次数一样多的情况下,它只显示一次。
private statice Toast toast
是我的全球敬酒词;我试着让它成为静态的,但没有解决问题。
private static Toast toast; // copies different toast messages; easily referenced and cancelled
private Toast backToast, deletedToast, setETimesToast, setRTimesToast, setLapsToast, savedToast,
finishToast;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Toast longClickToDeleteToast = Toast.makeText(MainActivity.this, R.string.long_press, Toast.LENGTH_SHORT);
final Toast longClickToEditToast = Toast.makeText(MainActivity.this,"Long click to edit Title", Toast.LENGTH_SHORT);
final Toast underDevToast = Toast.makeText(MainActivity.this, R.string.under_development, Toast.LENGTH_SHORT);
finishToast = Toast.makeText(MainActivity.this, R.string.finished, Toast.LENGTH_SHORT);
savedToast = Toast.makeText(MainActivity.this, R.string.saved , Toast.LENGTH_SHORT);
setETimesToast = Toast.makeText(MainActivity.this, R.string.set_etime , Toast.LENGTH_SHORT);
setRTimesToast = Toast.makeText(MainActivity.this, R.string.set_rtime, Toast.LENGTH_SHORT);
setLapsToast = Toast.makeText(MainActivity.this, R.string.set_laps , Toast.LENGTH_SHORT);
backToast = Toast.makeText(MainActivity.this, "Tap again to exit", Toast.LENGTH_SHORT);
deletedToast = Toast.makeText(MainActivity.this, R.string.deleted, Toast.LENGTH_SHORT);
例如,在下面的代码中,可以显示三种不同的toast。然而,如果一个吐司被触发了,它不会再次显示,直到我触发另一个吐司,这让我发疯!
public void onClick(View view){
if(toast != null) {
toast.cancel();
toast = null;
}
if(checkFields()){
return;
}
private boolean checkFields() {
final boolean b = true;
toast = null;
if (minutes == 0 && seconds == 0) {
toast = setETimesToast;
toast.show();
return b;
}
if (restMin == 0 && restSec == 0) {
toast = setRTimesToast;
toast.show();
return b;
}
if(laps == 0){
toast = setLapsToast;
toast.show();
return b;
}
return false;
}
发布于 2019-10-15 01:44:11
我通过添加条件&& toast.getView().isShown()
解决了这个问题,这样if (toast != null && toast.getView().isShown()) toast.cancel()
发布于 2019-10-14 10:10:03
首先,不要在你的吐司上取消,因为如果显示了.cancel()
,它就会取消。第二次调用.show()
来显示您的其他吐司。
发布于 2019-10-14 14:28:40
尝试将toast.show();放在onClick()函数中
https://stackoverflow.com/questions/58369205
复制相似问题