avast/android-styled-dialogs

AndroidRuntimeException: requestFeature() must be called before adding content

johnjohndoe opened this issue · 4 comments

I replaced android.support.v4.app.DialogFragment with SimpleDialogFragment:

public class MyDialogFragment extends SimpleDialogFragment {
    @NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        FragmentActivity activity = getActivity();
        View contentView = activity.getLayoutInflater()
                .inflate(R.layout.fragment_my_dialog, null)
        AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(activity);
        dialogBuilder
                .setView(contentView)
        return dialogBuilder.create();
    }

It is called here within a parent fragment:

DialogFragment dialogFragment = new MyDialogFragment();
dialogFragment.show(getActivity().getSupportFragmentManager(),
        MyDialogFragment.FRAGMENT_TAG);

The following error occurs when I open the dialog:

android.util.AndroidRuntimeException: requestFeature() must be called before adding content
E  at com.android.internal.policy.impl.PhoneWindow.requestFeature(PhoneWindow.java:301)
E  at com.android.internal.app.AlertController.installContent(AlertController.java:231)
E  at android.app.AlertDialog.onCreate(AlertDialog.java:356)
E  at android.app.Dialog.dispatchOnCreate(Dialog.java:373)
E  at android.app.Dialog.show(Dialog.java:274)
E  at android.support.v4.app.DialogFragment.onStart(DialogFragment.java:398)
E  at android.support.v4.app.Fragment.performStart(Fragment.java:1810)
E  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:977)
E  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1126)
E  at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:739)
E  at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1489)
E  at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:454)
E  at android.os.Handler.handleCallback(Handler.java:739)
E  at android.os.Handler.dispatchMessage(Handler.java:95)
E  at android.os.Looper.loop(Looper.java:135)
E  at android.app.ActivityThread.main(ActivityThread.java:5221)
E  at java.lang.reflect.Method.invoke(Native Method)
E  at java.lang.reflect.Method.invoke(Method.java:372)
E  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
E  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 
compileSdkVersion 21
buildToolsVersion "21.1.1"
minSdkVersion 9
targetSdkVersion 21
compile 'com.android.support:appcompat-v7:21.0.3'

Hi,
what are you trying to do? Just display a custom content in the dialog?
Have a look to JayneHatDialogFragment in demo app - you should override method build(), not onCreateDialog()

Sorry, but I did not see this from the README. Maybe you want to mention it there more explicit.

It's in the readme, see section "How to create all other DialogFragments:". Would you phrase it differently?

I thought others might also stumble into the error since onCreateDialog() is the common way. Therefore, it might be helpful to explicitly name the build() method already in the README. Also a speaking error message would be nice if one uses onCreateDialog() and should not do so.