使用 DatePickerDialog 选择多个日期

Posted

技术标签:

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

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

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

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

【问题讨论】:

可能重复:***.com/questions/3734981/multiple-datepickers-in-same-activity 【参考方案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

【讨论】:

以上是关于使用 DatePickerDialog 选择多个日期的主要内容,如果未能解决你的问题,请参考以下文章

DatePickerDialog 错误地强制要求最短日期为 1970 年 1 月 1 日

android DatePickerDialog怎么设置日期选择范围。

Android - 在 datepickerdialog 中隐藏日期字段

Android:带有取消按钮的DatePickerdialog [重复]

datepickerdialog 隐藏日历并将我的日期选择器视图更改为标准模式

如何在按钮单击时显示 DatePickerDialog? [关闭]