如何解决Toast 消息消失得非常快
在 onResume()
方法中,我使用 new Handler()
创建警报对话框,并从我的警报对话框 onClick
方法调用 Wifi 系统设置活动并在其后显示 Toast
。
@Override
protected void onResume()
{
super.onResume();
new Handler(Looper.getMainLooper()).post(new Runnable() {
@Override
public void run() {
showDialog();
} });
}
private void showDialog()
{
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle("Alert Dialog");
builder.setMessage("Go to wifi settings and display Toast over it");
DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,int which) {
switch(which){
case DialogInterface.BUTTON_POSITIVE:
Intent intent = newIntent(Settings.ACTION_WIFI_SETTINGS);
startActivityForResult(intent,1);
String toastText = "Display Toast";
Toast.makeText(getApplicationContext(),toastText,Toast.LENGTH_LONG).show();
break;
case DialogInterface.BUTTON_NEGATIVE:
dialog.cancel();
break;
}
}
};
builder.setPositiveButton("Continue",dialogClickListener);
builder.setNegativeButton("Cancel",dialogClickListener);
AlertDialog dialog = builder.create();
dialog.setCancelable(false);
dialog.show();
}
在 Wifi 系统设置活动启动后,Toast 消息立即消失。
吐司应持续 3.5 秒。我看到我的吐司在 1 秒内消失了。所以,我决定在新的 hello world 项目 onCreate
方法上测试它,下面的代码行:
startActivityForResult(new Intent(Settings.ACTION_WIFI_SETTINGS),1);
Toast.makeText(getApplicationContext(),"Display Toast",Toast.LENGTH_LONG).show();
现在,Toast 行为正常,持续 3.5 秒。然后我再次在原始项目上测试 Toast 消息,但这次我将 Toast 消息放在 onCreate
方法中。启动我的应用程序,快速单击警报对话框按钮,打开 Wifi 系统设置后,Toast 仍然立即消失。
我怀疑这是因为我使用 Handler + dialog onClick 来调用 startActivityForResult(Intent,1)。也许是线程问题、我的手机(诺基亚 2.2、Android 11)问题或其他问题,但是,这是奇怪的 Toast 行为。如果您对此有解决方案,或者我可以尝试任何建议,请告诉我,我将不胜感激。
编辑:在我的 logcat 中找到了这个。 2021-07-31 23:16:53.165 1025-1568/? W/NotificationService:Toast 已经被杀死。 pkg=com.example.android token=android.os.BinderProxy@afaf53e 做了一些研究,似乎 Android 系统活动将我的 Toast 误认为是定制的 Toast(自 android 11 起自定义 Toast 被阻止)而没有理由这样做。我会再尝试一些东西,但就目前而言,我的结论是这是新 Toast 行为的错误。
解决方法
尝试使用 if-else 切换 switch() 并查看它是否有效。也许 break;
语句正在操纵 Toast(它不应该,或者问题可能出在其他地方,但试一试:))。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。