我有一个非常奇怪的问题,在一些 KitKat设备上,我的简单是/否AlertDialog将出现在当前片段后面,而不是在前台。我说对话框出现在当前片段后面的原因是因为只有在我旋转设备后对话框才出现在前景中。该应用程序具有MainActivity,可在占据大部分屏幕的不同片段之间切换。
MainActivity.java
@Override
public void onBackPressed() {
Builder builder = new AlertDialog.Builder(this);
builder.setMessage(getString(R.string.exit_confirm_summary))
.setTitle(getString(R.string.exit_confirm_title))
.setCancelable(true)
.setPositiveButton(getString(R.string.ok),
new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//...
}
})
.setNegativeButton(getString(R.string.cancel),
new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//...
}
});
AlertDialog dialog = builder.create();
dialog.show();
}
在做了一些研究之后,我发现在你的应用程序中使用Fragments时最好使用DialogFragment,所以我将代码更改为:
MainActivity.java
@Override
public void onBackPressed() {
AlertDialogFragment adf = new AlertDialogFragment();
adf.setRetainInstance(true);
adf.show(getFragmentManager(), "dialog");
}
AlertDialogFragment.java
public class AlertDialogFragment extends DialogFragment {
public AlertDialogFragment() {}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
return new AlertDialog.Builder(getActivity())
.setCancelable(false)
.setTitle("Alert DialogFragment")
.setMessage("AlertDialogFragment Test")
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// ...
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// ...
}
}).create();
}
}
然而,效果仍然相同。按下后退按钮时会出现对话框,但仅在按下后退按钮然后旋转设备后才能看到该对话框。在我回家并回到应用程序后,它也变得可见。我注意到它只发生在一些设备上,但我想彻底摆脱这个问题。
注意:此行为适用于应用中的所有对话框,而不仅仅是此对话框。
任何人都有任何想法发生了什么?