【问题标题】:Using DatePickerDialog to pick multiple dates使用 DatePickerDialog 选择多个日期
【发布时间】:2015-01-01 08:19:02
【问题描述】:

我想在一项活动中从用户那里获取多个日期。 Activity 实现了 onDateSetListener。

我有 4 个按钮,每个按钮都调用 showDialog 函数来显示一个 DatePickerDialog。在 OnDateSet 函数中,如何区分 4 个按钮? (如,我如何检查哪个按钮调用了这个对话框)。

我也有与 TimePicker 类似的问题,但我猜 DatePicker 的解决方案也适用于 TimePicker。

【问题讨论】:

标签: android android-datepicker android-timepicker


【解决方案1】:

您可以在 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
    }

}

【讨论】:

    【解决方案2】:

    使用以下代码创建 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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-17
      • 1970-01-01
      • 2020-01-04
      • 1970-01-01
      相关资源
      最近更新 更多