onDateSet не вызывается в android 5.1.1 - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть диалог выбора даты, который отлично работает на android 9 и android 10, я решил проверить на android 5.1.1, и после выбора даты ничего не происходит, onDateSet () не ' Не могу запустить, я прочитал по крайней мере 10 статей по SO, которые касаются подобных проблем, но не могу найти работающее решение

Вот мой код, возможно, кто-то может указать, что я делаю неправильно

DateDialog. java

public class DateDialog extends DialogFragment {
    DatePickerDialog.OnDateSetListener mOnDateSetListener;
    public static final String BUNDLE_CURRENT_DATE = "current_date";

    private long currentDateMillis = 0;

    public static DateDialog getInstance(long currentDate) {
        Bundle args = new Bundle();
        args.putLong(BUNDLE_CURRENT_DATE, currentDate);
        DateDialog dateDialog = new DateDialog();
        dateDialog.setArguments(args);
        return dateDialog;
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        mOnDateSetListener = (DatePickerDialog.OnDateSetListener) context;
    }

    @Override
    public void onDetach() {
        super.onDetach();
        mOnDateSetListener = null;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        currentDateMillis = getArguments().getLong(BUNDLE_CURRENT_DATE);
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        Calendar currentDateCalender = Calendar.getInstance();
        currentDateCalender.setTimeInMillis(currentDateMillis);
        DatePickerDialog datePickerDialog = new DatePickerDialog(getActivity(), mOnDateSetListener, currentDateCalender.get(Calendar.YEAR)
                , currentDateCalender.get(Calendar.MONTH), currentDateCalender.get(Calendar.DAY_OF_MONTH));
        long maxDate = System.currentTimeMillis() + TimeUnit.DAYS.toMillis(60);
        datePickerDialog.getDatePicker().setMaxDate(maxDate);
        Calendar tomorrow = Calendar.getInstance();
        tomorrow.add(Calendar.DATE, 1);
        datePickerDialog.getDatePicker().setMinDate(tomorrow.getTimeInMillis());
        return datePickerDialog;
    }
}

И вот как я запускаю диалог в своей деятельности

MyActivity. Java

public void editExpiryDate() {
        DateDialog dialog = DateDialog.getInstance(selectedExpiryDate);
        dialog.show(getFragmentManager(), "");
    }

    @Override
    public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
        Calendar newDate = Calendar.getInstance();
        newDate.set(Calendar.MONTH, month);
        newDate.set(Calendar.YEAR, year);
        newDate.set(Calendar.DAY_OF_MONTH, dayOfMonth);
        selectedExpiryDate = newDate.getTimeInMillis();

        String expiryDateDisplayed = dateFormat.format(new Date(selectedExpiryDate)) + " (" +
                DateUtil.getNumberOfDaysToGo(selectedExpiryDate) + " days)";
        expiryDateTextView.setText(expiryDateDisplayed);
    }
...