AndroidRuntimeException:在添加内容之前必须调用requestFeature()

时间:2013-07-05 11:33:28

标签: android android-fragments android-dialog android-dialogfragment

我有对话框片段。我打算在活动和对话中使用这个片段。我重写onCreateDialog和onCreateView方法。这是编码。

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.interval_time_popup, null);
        setup(view, false);
        return view;
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        View view = getActivity().getLayoutInflater().inflate(R.layout.interval_time_popup, null);

        builder.setTitle("Interval Time");
        builder.setView(view);
        setup(view, true);
        builder.setPositiveButton("Set", new DialogInterface.OnClickListener() {

            public void onClick(DialogInterface dialog, int which) {
                listener.setOnIntervalTime(hourNp.getValue(), minNp.getValue());
                dismiss();
            }
        });
        builder.setNegativeButton("Cancel", new OnClickListener() {

            public void onClick(DialogInterface dialog, int which) {
                dismiss();
            }
        });
        return builder.create();
    }

我在活动类中使用这个片段。

           SelectTimeIntervalDialogFragment fragment = new SelectTimeIntervalDialogFragment();
            fragment.setHrMin(hr, min);
            Bundle args = new Bundle();

            FragmentTransaction t = getSupportFragmentManager().beginTransaction();
            t.replace(R.id.shift_period_interval_layout, fragment);
            t.commit();

我从其他类似的活动中称呼它。

            if((getResources().getConfiguration().screenLayout &
                            Configuration.SCREENLAYOUT_SIZE_NORMAL) ==
                            Configuration.SCREENLAYOUT_SIZE_NORMAL){
                        Intent intent = new Intent(ShiftPeriodActivity.this, SelectIntervalActivity.class);
                        intent.putExtra("intervalHr", speriod.intervalHr);
                        intent.putExtra("intervalMin", speriod.intervalMin);
                        startActivityForResult(intent, 1);
                    } else {
                        FragmentManager fm = getSupportFragmentManager();
                        intervalDialog = new SelectTimeIntervalDialogFragment();
                        intervalDialog.setHrMin(speriod.intervalHr, speriod.intervalMin);
                        intervalDialog.show(fm, "interval_fragment");
                    }

我有两个条件。当屏幕大小正常时,它会调用包含片段对话框的活动。否则,它会调用弹出对话框。调用弹出对话框时我得到了异常。它说requestFeature() must be called before adding content。我可以这样用吗?我想知道如何克服这一点。

感谢。

2 个答案:

答案 0 :(得分:18)

看起来你的问题与我的问题完全一样 - 类似的代码和抛出的同样异常。

解决方案是执行@laalto建议:使用onCreateView()onCreateDialog()但不能同时使用它们。我知道异常似乎可能是由许多不同的事情引起的,但这对我的情况有帮助;希望将来能帮助别人:)

答案 1 :(得分:-3)

我认为你正在使用requestWindowFeature();在创建

在setContentView(R.layout.activity);

之前使用它