我有一个看起来像这样的课程:
public class MyDialogFragment extends DialogFragment implements DialogInterface.OnClickListener {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
super.onCreateDialog(savedInstanceState);
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getActivity());
alertDialogBuilder.setTitle("This is a title");
alertDialogBuilder.setMessage("This is a message");
alertDialogBuilder.setPositiveButton("Yes", this);
alertDialogBuilder.setNegativeButton("No", null);
return alertDialogBuilder.create();
}
@Override
public void onClick(DialogInterface dialogInterface, int i) {
// Do something
}
public void showAllowingStateLoss(FragmentManager fragmentManager) {
FragmentTransaction ft = fragmentManager.beginTransaction();
ft.add(this, "MyDialogFragment");
ft.commitAllowingStateLoss();
}
}
它的用法如下:
MyDialogFragment dialog = new MyDialogFragment();
dialog.showAllowingStateLoss(fragmentManager);
问题是该消息未在应用中显示,只显示:
我做错了什么?
答案 0 :(得分:3)
无需添加DialogFragment.
我们有show()
方法来显示对话框。可能是这个问题。
MyDialogFragment dialog = new MyDialogFragment();
dialog.show(getFragmentManager(),dialog.getClass().getSimpleName());
抱歉我的英语不好。
答案 1 :(得分:0)
我自己找到了解决方案。显然,对话框使用主题中的android:textColorPrimary
作为文本颜色,并且该颜色在我的应用中为白色。这会导致在白色背景上包含白色文本的alertdialog。
因此解决方案是在theme.xml中添加它:
<style name="MyAndroidTheme" parent="Theme.AppCompat.Light">
<item name="android:alertDialogTheme">@style/MyAlertDialogTheme</item>
</style>
<style name="MyAlertDialogTheme" parent="MyAndroidTheme">
<item name="android:textColorPrimary">@android:color/black</item>
<item name="android:windowBackground">@android:color/white</item>
<item name="android:windowIsFloating">true</item>
</style>
我真的不知道为什么需要android:windowIsFloating
,但没有它,对话框就会全屏显示。