只是为了澄清我在问什么:当调用 OnStop()/OnPause()/Edit Text OnClick() 时,我已经关闭了 toast。尽管标题看起来像,但这不是重复:当应用程序关闭时如何停止显示来自 Toast 的消息?(对不起,我找不到更好的标题)
所以我不是在问如何关闭 toast,而是在完成应用程序之前如何更新关闭的 toast。
举个例子,当您删除设置的闹钟时,我的 nexus 5 (4.4.4) 原生闹钟会显示通知。如果在关闭/最小化应用程序时,它会关闭 toast,然后关闭/最小化应用程序。我会知道一个允许我这样做的代码。
这是我的示例代码:
public class MainActivity extends Activity {
private Toast toast;
private Button buttonClick;
private EditText editTextClick;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
buttonClick = (Button) findViewById(R.id.buttonClick);
editTextClick = (EditText) findViewById(R.id.editTextClick);
buttonClick.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
if (toast != null) {
toast.cancel();
}
toast = Toast.makeText(this, "This might close before the app stop", Toast.LENGTH_SHORT);
toast.show();
}
});
editTextClick.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
toast = Toast.makeText(this, "This might close before the keyboard open", Toast.LENGTH_SHORT);
toast.show();
if (toast != null) {
toast.cancel();
}
}
});
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
if (toast != null) {
toast.cancel();
}
super.onStop();
}
@Override
protected void onPause() {
// TODO Auto-generated method stub
if (toast != null) {
toast.cancel(); // This close toast when stop called
}
super.onPause();
}
}
每次单击编辑文本时,我都会尝试关闭 toast 通知。但它首先打开键盘(将吐司和键盘重叠一段时间)而不是关闭吐司。
当我关闭应用程序或备用应用程序时也会发生同样的情况。吐司在与其他布局重叠后消失。
我已经尝试使用 a Thread.sleep(1000);
(在 try-catch 子句中) 和 after if(toast != null) { toast.cancel(); }
,但没有改变任何东西。
我可以在这个示例代码中做些什么来让它关闭 toast 然后做其他事情(比如打开键盘、关闭应用程序、显示最近的应用程序等)。