• After 15+ years, we've made a big change: Android Forums is now Early Bird Club. Learn more here.

Apps requestfeature() must be called before adding content error on onClick()

Joan Z

Lurker
I have a fragment that have button and datepicker (among other stuffs). datepickerdialog will be displayed when user click the button. At first, I had a separate fragment for datepicker and I didnt have that error. but when I put the datepicker into the main fragment, I got this error when I click the button

Code:
android.util.AndroidRuntimeException: requestFeature() must be called before adding content

i don't have requestfeature() in my code. here is part of my MainActivity.java

Java:
public class MainActivity extends AppCompatActivity{

private Toolbar mToolbar;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    //toolbar
    mToolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(mToolbar);


    //database
    DbHelper databaseHelper = new DbHelper(this);
    databaseHelper.getWritableDatabase();
}

public void onClick(View view){
        DialogFragment dp = new MyFragment();
        dp.show(getSupportFragmentManager(), "date picker");
    }

part of MyFragment.java

Java:
public class MyFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {


private View mRootView;
private Item currentItem = null;
private Toolbar mToolbar;
private String Note;
private TextView dateText;
private TextView error;
private EditText item;
private EditText quantity;
private EditText note;
private Spinner sspinner;
private Spinner spinner;
private int spinnerCount=0;
private int spinnerInitializedCount=0;
private int remSpinnerCount=0;
private int remSpinnerInitializedCount=0;

public MyFragment() {

}

public static MyFragment newInstance(long id) {
    MyFragment myFragment = new MyFragment();

    if (id > 0) {
        Bundle bundle = new Bundle();
        bundle.putLong("id", id);
        myFragment.setArguments(bundle);
    }
    return myFragment;
}

public void getCurrentItem() {
    Bundle args = getArguments();
    if (args != null && args.containsKey("id")) {
        long id = args.getLong("id", 0);
        if (id > 0) {
            currentItem = ItemManager.newInstance(getActivity()).getMyItem(id);
        }
    }
}


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setHasOptionsMenu(true);
    getCurrentItem();

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    mRootView = inflater.inflate(R.layout.item_fragment, container, false);
    item=(EditText)mRootView.findViewById((R.id.item));
    quantity=(EditText)mRootView.findViewById(R.id.amount);
    error = (TextView)mRootView.findViewById(R.id.error);
    note = (EditText)mRootView.findViewById(R.id.notes);
    dateText = (TextView)mRootView.findViewById(R.id.date_selected);


    spinner = (Spinner) mRootView.findViewById(R.id.units);
    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(getActivity(), R.array.units, android.R.layout.simple_spinner_dropdown_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    spinner.setAdapter(adapter);


    sspinner = (Spinner) mRootView.findViewById(R.id.reminder_list);
    ArrayAdapter<CharSequence> aadapter = ArrayAdapter.createFromResource(getActivity(), R.array.countdown_reminder, android.R.layout.simple_spinner_dropdown_item);
    aadapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    sspinner.setAdapter(aadapter);

    spinner.setOnItemSelectedListener(spinnerListener);
    sspinner.setOnItemSelectedListener(spinnerListener);
    spinnerCount=1;
    sspinnerCount=1;

    return mRootView;
}


public static final String[] months = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};
Calendar calendar = Calendar.getInstance();
private String selected_date;

@Override
public Dialog onCreateDialog(Bundle savedInstanceState){

    int year = calendar.get(Calendar.YEAR);
    int month = calendar.get(Calendar.MONTH);
    int date = calendar.get(Calendar.DATE);

    return new DatePickerDialog(getActivity(), this, year, month, date);
}

@Override
public void onDateSet(DatePicker view, int year, int month, int date) {

    calendar.set(year, month + 1, date);
    calendar.getTime();
    String mon = months[month];

    //get the selected date
    selected_date = ""+view.getDayOfMonth()+ "/" + ""+((view.getMonth())+1)+ "/" + "" +view.getYear();


    //Display the selected date after the date has been set
    dateText = (TextView)getActivity().findViewById(R.id.date_selected);
    dateText.setText(selected_date);

}

What's causing this error??? I'm assuming it's the datepicker since I didn't have that error til I added datepicker. Thank you in advance.
 
Last edited:
I've tried the solutions on SOF but I still get the same error or nullpointerexception. Clearly there's something I'm missing or not understand?
 
Back
Top Bottom