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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...