我有一个按钮来显示对话框。当我单击示例应用程序中的对话框按钮时,几秒钟后立即按下主页按钮。 打开另一个应用程序,按主页按钮,然后再次打开示例应用程序。
预期结果: 应显示一个对话框窗口。
实际结果: 不应显示对话框窗口。
这是源代码:
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 中。我无法弄清楚发生了什么问题。
试试这个,
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);
}
}
}