【发布时间】:2021-10-06 15:51:20
【问题描述】:
在onResume() 方法中,我使用new Handler() 创建警报对话框,并从我的警报对话框onClick 方法中调用Wifi 系统设置Activity 并在其后显示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 系统设置 Activity 启动后,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(自定义 Toast 自 android 11 以来被阻止),没有理由这样做。我会再尝试一些东西,但现在,我的结论是,这是新 Toast 行为的错误。
【问题讨论】:
-
不是线程问题。我认为这是由于 11 的吐司行为变化。
-
@AbhayKoradiya 可能是,我会检查旧的 Android 版本
标签: android android-alertdialog handler toast android-toast