按下 home 键进入 onResume 状态时,对话框不显示 android 10-Hander 问题

问题描述 投票:0回答:1

我有一个按钮来显示对话框。当我单击示例应用程序中的对话框按钮时,几秒钟后立即按下主页按钮。 打开另一个应用程序,按主页按钮,然后再次打开示例应用程序。

预期结果: 应显示一个对话框窗口。

实际结果: 不应显示对话框窗口。

这是源代码:

 public class DialogController {

    private static final String TAG = "DialogController";
    private static Dialog mDialog = null;

    public static void ShowErrorDialog(final Activity activity,
                                       final int messageId) {
        mDialog = new Dialog(activity);
        mDialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
        mDialog.setContentView(R.layout.layout_dialog_blue);

        TextView messageText = (TextView) mDialog.findViewById(R.id.blue_dialog_guidance);
        messageText.setText(messageId);
        messageText.setVisibility(View.VISIBLE);

        mDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        mDialog.setOwnerActivity(activity);
        mDialog.setCanceledOnTouchOutside(false);
        mDialog.show();

    }



}

MainActivity.java:

public class MainActivity extends Activity {
    private static final String TAG = "MainActivity";
    Button click;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        Log.i(TAG, "onCreate()");
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        click=(Button)findViewById(R.id.button1);

        click.setOnClickListener(v -> {
            Log.i(TAG, "clicked for dialog");

            Handler handler = new Handler();
            handler.postDelayed(new Runnable() {

                public void run() {

                    DialogController.ShowErrorDialog(MainActivity.this,
                            R.string.string_error_dialog);


                }
            }, 10000);


        });
    }
    

}

奇怪的是,仅从 Android 8 到 Android 10 不显示对话框窗口。 但这个对话框窗口显示在 Android 11 中。我无法弄清楚发生了什么问题。

android android-dialog android-windowmanager android-window
1个回答
0
投票

试试这个,

public class MainActivity extends AppCompatActivity {
    private static final String TAG = "MainActivity";
    Button click;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        Log.i(TAG, "onCreate()");
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        click = findViewById(R.id.button1);

        click.setOnClickListener(v -> {
            Handler handler = new Handler();
            handler.postDelayed(() -> {
                // This will be executed after 10 seconds
                getLifecycle().addObserver(new MyObserver());
            }, 10000);
        });

        
    }

    private class MyObserver implements LifecycleObserver {
        @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
        public void onResume() {
            // This will be called when the activity is in the resumed state
            DialogController.ShowErrorDialog(MainActivity.this, R.string.string_error_dialog);
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.