2016-12-12 2 views
1

У меня есть класс, который выглядит следующим образом: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

что я делаю неправильно?

+0

Почему вы используете фрагмент диалога при использовании AlertDialog внутри? –

+0

@JozefDochan не знаю, это упрощенная версия кода из приложения, которое я «унаследовал» :) Я очень мало знаю об Android-разработке, я просто пытаюсь исправить ошибку. – TheQ

+0

нет смысла использовать диалог «Фрагмент», если вы хотите показать сообщение и кнопки «да/нет». Просто где вы создаете dialogFragment create AlerDialog –

ответ

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 нужен, но без него, диалог становится полноэкранный режим.

3

Не нужно добавлять DialogFragment. У нас есть show() метод отображения диалога. Может быть, проблема в этом.

MyDialogFragment dialog = new MyDialogFragment(); 
dialog.show(getFragmentManager(),dialog.getClass().getSimpleName()); 

Извините за мой плохой английский.

+0

Это приводит к тому же поведению, что и код в моем вопросе - диалоговое окно без текста, только название и кнопки :( – TheQ

Смежные вопросы