问题描述
在 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(它不应该,或者问题可能出在其他地方,但试一试:))。