Использование DatePickerDialog для выбора нескольких дат

Я хочу получить несколько дат от пользователя в одном действии. Действие реализует onDateSetListener.

У меня есть 4 кнопки, каждая из которых вызывает функцию showDialog для отображения DatePickerDialog. В функции OnDateSet, как мне отличить 4 кнопки? (например, как мне проверить, какая кнопка вызвала этот диалог).

У меня похожая проблема с TimePicker, но я предполагаю, что решение для DatePicker также будет работать для TimePicker.


person Asim    schedule 05.11.2014    source источник


Ответы (2)


Вы можете добавить тег в свой DatePicker. При создании диалога выполните:

mDatePickerDialog.getDatePicker().setTag(FIRST_DIALOG);

Где FIRST_DIALOG — это, например, целое число или строка; Затем вы используете только один onDateSetListener:

onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth)
{
    int code = (Integer) view.getTag(); //if you are using integers
    switch(code)
    {
        // switch between your datePicker
    }

}
person rickyalbert    schedule 05.11.2014

Создайте CustomDatePickerDialog с кодом ниже

public class CustomDatePickerDialog extends DatePickerDialog
{
    public CustomDatePickerDialog(Context context, OnDateSetListener callBack, int year, int monthOfYear, int dayOfMonth,View attachedView)
    {
        super(context, callBack, year, monthOfYear, dayOfMonth);
        getDatePicker().setTag(attachedView.getId());
    }

    public CustomDatePickerDialog(Context context, OnDateSetListener callBack, int year, int monthOfYear, int dayOfMonth)
    {
        super(context, callBack, year, monthOfYear, dayOfMonth);
    }

    public CustomDatePickerDialog(Context context, int theme, OnDateSetListener listener, int year, int monthOfYear, int dayOfMonth)
    {
        super(context, theme, listener, year, monthOfYear, dayOfMonth);
    }
}

Назовите это, как показано ниже

btnSelectDate.setOnClickListener(new View.OnClickListener()
{
    @Override
    public void onClick(View view)
    {
        CustomDatePickerDialog customDatePickerDialog = new CustomDatePickerDialog(MainActivity.class,dateSetListener,2014,10,1,view);
        customDatePickerDialog.show();
    }
});

Вы получите диалоговое окно, вызываемое кнопкой, как показано ниже, в прослушивателе.

DatePickerDialog.OnDateSetListener dateSetListener = new DatePickerDialog.OnDateSetListener()
{
    @Override
    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth)
    {
        int viewID = view.getTag();
        switch(viewID)
        {
            case R.id.btnDatePicker1;
            {
                //DO Something
            }
            case R.id.btnDatePicker2;
            {
                //DO Something
            }
        }
    }
};

Примечание. Для вызова getDatePicker() в пользовательском диалоговом окне требуется API уровня 11.

person Kirtan    schedule 05.11.2014