DialogFragment不显示消息

时间:2016-12-12 17:23:04

标签: java android android-dialogfragment

我有一个看起来像这样的课程:

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);

问题是该消息未在应用中显示,只显示:

Screenshot

我做错了什么?

2 个答案:

答案 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,但没有它,对话框就会全屏显示。