【问题标题】:Disable Previous dates base on selected date at other datepicker dialog根据其他日期选择器对话框中的选定日期禁用以前的日期
【发布时间】:2017-03-16 14:50:27
【问题描述】:

我想简单地解释一下这个问题,现在我有两个 android datapicker 对话框,Check-In 和 Check-out。 Check-in datepicker 我已经将mindate设置为今天,也就是说用户只能从今天开始选择。但是如何根据用户从签入日期选择器中选择的日期来设置签出日期。

示例:今天 3/11/2016

用户从签入日期选择器中选择:7/11/2016

我希望在结帐 Datepicker 时禁用所有之前的日期,即 2016 年 7 月 11 日。

我搜索了很多教程和论坛,大部分时间只显示如何禁用基于当前日期的传递日期。 我的应用程序正在做酒店登录系统

public void showDialog() {
    btncheckin = (Button) findViewById(R.id.checkInDate);
    btncheckout = (Button) findViewById(R.id.checkoutdate);
    btncheckin.setOnClickListener(
            new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    showDialog(DIALOG_ID);

                }


            }
    );
    btncheckout.setOnClickListener(
            new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    showDialog(DIALOG2_ID);

                }


            }
    );

}

@Override
protected  Dialog onCreateDialog(int id) {

    switch (id) {
        case DIALOG2_ID:

            DatePickerDialog datePickerDialog = new DatePickerDialog(this, dpickerListnerCheckOut, year_x, month_x, day_x);


            Calendar c = Calendar.getInstance();

            c.add(Calendar.DATE, 1);

            Date newDateBlock = c.getTime();
            datePickerDialog.getDatePicker().setMinDate(newDateBlock.getTime());

            return datePickerDialog;

        case DIALOG_ID:

        DatePickerDialog datePickerDialog2 = new DatePickerDialog(this, dpickerListnerCheckIn, year_x, month_x, day_x);
            Calendar c2 = Calendar.getInstance();

            c2.add(Calendar.DATE, 1);
            datePickerDialog2.getDatePicker().setMinDate(System.currentTimeMillis()-1000);

            return datePickerDialog2;
    }
    return null;
}


 DatePickerDialog.OnDateSetListener dpickerListnerCheckOut = new DatePickerDialog.OnDateSetListener() {
    @Override
    public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
        year_x = year;
        month_x = month + 1;
        day_x = dayOfMonth;

         //Toast.makeText(PaymentActivity.this,year_x +"/"+month_x +" / "+day_x,Toast.LENGTH_SHORT).show();

        checkOutText.setText(year_x + "/" + month_x + "/ " + day_x);


    }
};


 DatePickerDialog.OnDateSetListener dpickerListnerCheckIn = new DatePickerDialog.OnDateSetListener() {
    @Override
    public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
        year_x = year;
        month_x = month + 1;
        day_x = dayOfMonth;
        checkInText.setText(year_x + "/" + month_x + "/ " + day_x);
    }
};

【问题讨论】:

  • 将签到日期作为长变量,单位为毫秒,然后设置为签出DatePicker的最小日期。
  • 如何将签到日期作为长变量(以毫秒为单位)?可以举一些例子吗?

标签: android date datepicker duration period


【解决方案1】:

在我的 checkIn dpickerlistener 中添加以下行

try {
     String dateString = checkInDate;
     SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
     Date date = sdf.parse(dateString);
     Long minDate = date.getTime();
     } catch (java.text.ParseException e) {
            e.printStackTrace();
     }

结帐日期选择器对话框

DatePickerDialog datePickerDialog = new DatePickerDialog(this, dpickerListnerCheckOut, year_x, month_x, day_x);
Calendar c = Calendar.getInstance();

         c.add(Calendar.DATE, 1);
         datePickerDialog.getDatePicker().setMinDate(minDate);

return datePickerDialog;

我所做的解决方案是,我尝试从签入 dpickerlistener minDate 中获取 Mindate,并将 minDate 传递给签出 datepickerdialog

【讨论】:

    【解决方案2】:

    那么你应该试试这个:-

    datePickerDialog.getDatePicker().setMinDate(newDate.getTime()-(newDate.getTime()%(24*60*60*1000)));
    

    【讨论】:

    • 我已经测试了这两行,它只会禁用今天的通过日期。正如我的问题所述,我已经完成了这一点,我想要实现的目标是:我有两个 DataPickerDialog,签入和签出。我希望根据 CheckIn datepicker 对话框中选择的日期禁用 CheckOut datepicker 对话框的所有通过日期。详细来说,我举一个例子:用户在 CheckIn DatePicker Dialog 中选择 15/11/2016。我希望在结帐对话框中阻止基于 2016 年 11 月 15 日的上一个日期。
    • @JackdonChew 请查看我更新的答案。如果您有任何疑问,可以问我。
    • 日期 newDate = c.getTime();是这样声明的 newDate 吗?
    • @JackdonChew newDate 是您的结帐日期。
    • 我应该在什么地方声明newDate
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-23
    • 1970-01-01
    • 1970-01-01
    • 2020-08-25
    • 2023-03-03
    相关资源
    最近更新 更多