Задача: реализовать фрагмент, который позволяет вернуть в место (во фрагмент), откуда этот фрагмент вызван, выбранную пользователем дату.
Почитав похожие темы, что необходимо использовать DatePickerDialog внутри DialogFragment.
На данный момент пробую просто хотябы показать этот календарь Вот как сейчас это выглядит:
public class DatePickerDialogFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {
public static DatePickerDialogFragment newInstance() {
return new DatePickerDialogFragment();
}
@NonNull
@Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
final Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);
DatePickerDialog datePickerDialog = new DatePickerDialog(getContext(), this, year, month, day);
datePickerDialog.show();
return datePickerDialog;
}
@Override
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
Calendar calendar = Calendar.getInstance();
calendar.set(year, month, dayOfMonth);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String formattedDate = sdf.format(calendar.getTime());
}
}
Пробую вызвать из NavigationDrawerActivity (), но появляется просто пустой Fragment, а окно в нем не появляется.
@Override
public boolean onNavigationItemSelected(MenuItem item) {
Fragment fragment = null;
switch (item.getItemId()){
case R.id.nav_setting_student:
fragment = SearchScheduleStudentFragment.newInstance();
break;
case R.id.nav_gallery:
fragment = DatePickerDialogFragment.newInstance();
break;
}
if(fragment != null) {
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction().replace(R.id.container, fragment)
.commit();
item.setChecked(true);
setTitle(item.getTitle());
DrawerLayout drawer = findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
return false;
}
Пока предварительно думаю, что Fragment пустой из-за того что мы не указали в onCreateView layout, но ведь для DatePickerDialog этого и не требуется.
Возможно ошибаюсь, помогите разобраться
Попробуйте так
public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {
private static DatePickerDialog.OnDateSetListener listener;
public static DatePickerFragment getInstance(DatePickerDialog.OnDateSetListener listener){
DatePickerFragment.listener = listener;
return new DatePickerFragment();
}
public DatePickerFragment(){}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the current date as the default date in the picker
final Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int day = c.get(Calendar.DAY_OF_MONTH);
// Create a new instance of DatePickerDialog and return it
return new DatePickerDialog(getActivity(), this, year, month, day);
}
public void onDateSet(DatePicker view, int year, int month, int day) {
listener.onDateSet(view, year, month, day);
}}
Для Вызова этого диалога используйте код:
DialogFragment newFragment = DatePickerFragment.getInstance(this);
newFragment.show(getFragmentManager(), "datePicker");
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок