在Fragment中实现DatePicker时,必须在添加内容错误之前调用requestFeature()

时间:2015-05-26 22:45:37

标签: android android-fragments datepicker

此特定错误消息在SO和网络上很受欢迎,但我仍然找不到任何建议的解决方案来为我工作。

我试图将DatePicker添加到我的片段中,当单击一个按钮时会触发它。但是这个错误会一直弹出。这是Fragment类使用的:

public class MyFragment extends DialogFragment implements 
                     DatePickerDialog.OnDateSetListener {

Context context;


@NonNull
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {


    //Use the current date as the default value for the picker
    Calendar calendar = Calendar.getInstance();
    int year = calendar.get(Calendar.YEAR);
    int month = calendar.get(Calendar.MONTH);
    int day = calendar.get(Calendar.DAY_OF_MONTH);

    //Create a new instance of datepicker and return it
    return new DatePickerDialog(getActivity(), this, year, month, day);

}
public void onDateSet(DatePicker view, int year, int month, int day) {


}



public View onCreateView(LayoutInflater inflater, ViewGroup container, 

                                 Bundle savedInstanceState) {


    View rootView = inflater.inflate(R.layout.my_layout, container, false);

    Button reminderButton = (Button) rootView.findViewById(R.id.dueDateButton);
    reminderButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            DialogFragment dialogFragment = new MyFragment();
            dialogFragment.show(getFragmentManager(), "datePicker");
        }
    });

    context = getActivity(); 


    return rootView;
}

}

此Fragment处理选项卡式活动中的一个视图。我试过添加:

getDialog().getWindow().requestFeature(Window.FEATURE_NO_TITLE);

就在之前:

View rootView = inflater.inflate(R.layout.newdebt_layout, container, false);
没有运气。 我也试过添加这个:

getWindow().requestFeature(Window.FEATURE_NO_TITLE);

在嵌入此片段的活动中的setContentView()方法之前,也没有运气。

我查看过thisthisthis个问题以及其他一些没有运气的人。

在堆栈跟踪中,代码中没有标记任何特定行。

05-27 06:17:30.687  23204-23204/com.ojonugwaochalifu.blablabla E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.ojonugwaochalifu.blablabla, PID: 23204
android.util.AndroidRuntimeException: requestFeature() must be called before adding content
        at com.android.internal.policy.impl.PhoneWindow.requestFeature(PhoneWindow.java:336)
        at com.android.internal.app.AlertController.installContent(AlertController.java:242)
        at android.app.AlertDialog.onCreate(AlertDialog.java:337)
        at android.app.Dialog.dispatchOnCreate(Dialog.java:374)
        at android.app.Dialog.show(Dialog.java:267)
        at android.support.v4.app.DialogFragment.onStart(DialogFragment.java:399)
        at android.support.v4.app.Fragment.performStart(Fragment.java:1813)
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:989)
        at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1138)
        at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:740)
        at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1501)
        at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:458)
        at android.os.Handler.handleCallback(Handler.java:733)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:157)
        at android.app.ActivityThread.main(ActivityThread.java:5867)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:858)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:674)
        at dalvik.system.NativeStart.main(Native Method)

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题。我在onCreateView方法中膨胀了另一个自定义对话框视图。删除它解决了问题。

每次调用onCreateView时都会调用show方法。 确保您没有无条件地在onCreateView中夸大任何其他观点。