как переключаться между двумя DatePickers в onDateSet ()? - PullRequest
0 голосов
/ 27 октября 2018

У меня есть DialogFragment, который настроен для обработки двух разных DatePickers. «FilterNum» в комплекте позволяет мне использовать два разных setTitle () для двух DatePickers.

DialogFragment использует прослушиватель для возврата выбранной даты в OnDateSet () в MainActivity. Я хотел бы иметь возможность настроить метод переключения в OnDateSet так, чтобы при выборе DatePicker # 1 выполнялся код варианта № 1 или, если выбран DatePicker № 2, выполнялся код варианта № 2.

MainActivity

...
DatePicker #1

beforeDueDateLine.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            Bundle bundle = new Bundle();
            bundle.putInt("FilterNum",1);
            FilterDueDatesFragment filterFragment = new FilterDueDatesFragment();
            filterFragment.setArguments(bundle);
            filterFragment.show(getSupportFragmentManager(), "filterDatePicker");                
            dialogFilter.dismiss();
        }
    });

DatePicker #2

afterDueDateLine.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            Bundle bundle = new Bundle();
            bundle.putInt("FilterNum",2);
            FilterDueDatesFragment filterFragment = new FilterDueDatesFragment();
            filterFragment.setArguments(bundle);
            filfilterFragment.show(getSupportFragmentManager(), "filterDatePicker");
            dialogFilter.dismiss();

FilterFragment extends DialogFragment
...  
static final int ON_OR_BEFOREFILTER = 1;
static final int ON_OR_AFTERFILTER= 2;
private int mChosenFilter;
int year = 0, month = 0, day = 0;

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    super.onCreateDialog(savedInstanceState);

    Bundle bundle = this.getArguments();
    if (bundle != null) {
        mChosenFilter = bundle.getInt("FilterNum");
    }

    if (getActivity() != null) {
        final Calendar c = Calendar.getInstance();
        year = c.get(Calendar.YEAR);
        month = c.get(Calendar.MONTH);
        day = c.get(Calendar.DAY_OF_MONTH);
    }

    DatePickerDialog.OnDateSetListener listener = (DatePickerDialog.OnDateSetListener) getActivity();

    DatePickerDialog pickerBefore;
    DatePickerDialog pickerAfter;       

    switch (mChosenFilter) {

        case ON_OR_BEFOREFILTER:
            pickerBefore = new DatePickerDialog(getActivity(), THEME_DEVICE_DEFAULT_DARK, listener, year, month, day);
            pickerBefore.setTitle("Select 'On or Before' due date");
            return pickerBefore;

        case ON_OR_AFTERFILTER:
            pickerAfter = new DatePickerDialog(getActivity(), THEME_DEVICE_DEFAULT_DARK, listener, year, month, day);
            pickerAfter.setTitle("Select 'On or After' due date");
            return pickerAfter;
        }
    return null;
    }

MainActivity OnDateSet()

    @Override
    public void   
        onDateSet(android.widget.DatePicker view, int year, int month, int day) {

            // this is where i need to set up different code 
            if (pickerBefore) {
                ...
            }
            if (pickerAfter) {
            }

1 Ответ

0 голосов
/ 27 октября 2018

Сначала удалите из вашей MainActivity свой onDateSetListener, а вместо этого добавьте 2 метода onDateSetPicker1 (int year, int month, int day) и onDateSetPicker2 (int year, int month, int day). И тогда в вашем диалоговом фрагменте используйте этот код:

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    super.onCreateDialog(savedInstanceState);

    Bundle bundle = this.getArguments();
    if (bundle != null) {
        mChosenFilter = bundle.getInt("FilterNum");
    }

    if (getActivity() != null) {
        final Calendar c = Calendar.getInstance();
        year = c.get(Calendar.YEAR);
        month = c.get(Calendar.MONTH);
        day = c.get(Calendar.DAY_OF_MONTH);
    }

    DatePickerDialog.OnDateSetListener listener1 = new DatePickerDialog.OnDateSetListener() {
        onDateSet(android.widget.DatePicker view, int year, int month, int day) {
            ((MainActivity)getActivity()).onDateSetPicker1(int year, int month, int day);
        }
    }
    DatePickerDialog.OnDateSetListener listener2 = new DatePickerDialog.OnDateSetListener() {
        onDateSet(android.widget.DatePicker view, int year, int month, int day) {
            ((MainActivity)getActivity()).onDateSetPicker2(int year, int month, int day);
        }
    }

    DatePickerDialog pickerBefore;
    DatePickerDialog pickerAfter;       

    switch (mChosenFilter) {

        case ON_OR_BEFOREFILTER:
            pickerBefore = new DatePickerDialog(getActivity(), THEME_DEVICE_DEFAULT_DARK, listener1, year, month, day);
            pickerBefore.setTitle("Select 'On or Before' due date");
            return pickerBefore;

        case ON_OR_AFTERFILTER:
            pickerAfter = new DatePickerDialog(getActivity(), THEME_DEVICE_DEFAULT_DARK, listener2, year, month, day);
            pickerAfter.setTitle("Select 'On or After' due date");
            return pickerAfter;
        }
    return null;
    }

Таким образом, у вас будут разные слушатели в вашем диалоге, и эти разные слушатели будут вызывать разные методы вашей родительской активности.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...