В ошибке указано, что DatePickerFragment
не является классом public static
. То, к чему ваш код примерно компилируется, выглядит следующим образом. Обратите внимание, что я оставил все нерелевантные коды:
public class PeopleFragment {
private class InnerDatePickerFragment extends DatePickerFragment {
private PeopleFragment parent;
InnerDatePickerFragment(PeopleFragment parent) {
this.parent = parent;
}
}
public void onDateClick() {
DialogFragment dialogFragment = new InnerDatePickerFragment(this);
}
}
Итак, есть 2 проблемы с вашим кодом:
- Фрагмент является частным. В вашем случае класс фрагмента фактически объявлен только внутри метода, но использование
private
в моем примере кода достаточно близко. Вероятно, это также является причиной того, что для имени фрагмента написано null
, поскольку класс Fragment на самом деле является анонимным внутренним классом.
- Фрагмент имеет ссылку на внешнее
PeopleFragment
.
Ограничение на использование только классов public static
является ограничением Android. Из-за жизненного цикла Activity и Fragment Android должен иметь возможность полностью воссоздавать экземпляры Activites и Fragment. В вашем случае он не сможет этого сделать. У него нет возможности создать частный / анонимный фрагмент, и он не сможет установить неявное поле parent
.
Как вы можете решить это? Совершенно легко, либо переместите класс DatePickerFragment
из класса PeolpeFragment
, либо сделайте его внутренним классом public static
. Э.Г.
public class PeopleFragment {
public static class InnerDatePickerFragment extends DatePickerFragment {
// ... your code goes here ...
}
public void onDateClick() {
DialogFragment dialogFragment = new InnerDatePickerFragment();
// ... your code goes here ...
}
}