Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android DatePicker:基于当前日期禁用以前的日期_Android_Android Datepicker - Fatal编程技术网

Android DatePicker:基于当前日期禁用以前的日期

Android DatePicker:基于当前日期禁用以前的日期,android,android-datepicker,Android,Android Datepicker,我的应用程序中有一个日期选择器,设置方式如下: 布局: <TextView android:id="@+id/traveltext" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1.11"

我的应用程序中有一个
日期选择器
,设置方式如下:

布局:

            <TextView
                android:id="@+id/traveltext"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1.11"
                android:text="Date Of Travel"
                android:textStyle="bold" />

             <EditText
            android:id="@+id/txtDate"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1" >
        </EditText>

              <Button
            android:id="@+id/btnCalendar"
            android:layout_width="30dp"
            android:layout_height="42dp"
            android:layout_marginRight="50dp"
            android:background="@drawable/date" >
        </Button>
        </LinearLayout>

一旦创建:

btnCalendar = (Button) findViewById(R.id.btnCalendar);
    txtDate = (EditText) findViewById(R.id.txtDate);
    btnCalendar.setOnClickListener(this);
方法:

 @Override
public void onClick(View v) {

    if (v == btnCalendar) {

        // Process to get Current Date
        final Calendar c = Calendar.getInstance();
        mYear = c.get(Calendar.YEAR);
        mMonth = c.get(Calendar.MONTH);
        mDay = c.get(Calendar.DAY_OF_MONTH);

        // Launch Date Picker Dialog
        DatePickerDialog dpd = new DatePickerDialog(this,
                new DatePickerDialog.OnDateSetListener() {

                    @Override
                    public void onDateSet(DatePicker view, int year,
                            int monthOfYear, int dayOfMonth) {
                        // Display Selected date in textbox
                        txtDate.setText(dayOfMonth + "-"
                                + (monthOfYear + 1) + "-" + year);

                    }
                }, mYear, mMonth, mDay);
        dpd.show();
    }   }
现在我的问题是,如何基于当前日期禁用以前的日期


请帮忙。谢谢。

我认为你实际上无法禁用日期选择器。但是,一旦选择了日期,您就可以使用当前日期对其进行验证,并让用户重新选择未来日期。如果用户选择了过去的日期,则可以发送toast消息。

在onDateSet中,您可以在日期上进行验证,就像您希望将日期设置为今天的日期之后一样,然后在onDateSet方法中添加以下代码

            Calendar cl = Calendar.getInstance();
            cl.set(year, monthOfYear, dayOfMonth);
            if (cl.after(Calendar.getInstance())) { 
                    //set your date
            }else{
                    //do nothing
            }
希望这对你有用

private DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() {
    // the callback received when the user "sets" the Date in the
    // DatePickerDialog
    public void onDateSet(DatePicker view, int yearSelected,
            int monthOfYear, int dayOfMonth) {
        year = yearSelected;
        month = monthOfYear + 1;
        day = dayOfMonth;
        // Set the Selected Date in Select date Button
        txtarrivedate.setText(year + "-" + month + "-" + day);
    }
};
//方法在调用
showDialog()
Method时自动被调用

   @Override
   protected Dialog onCreateDialog(int id) {
    switch (id) {
    case 1:
        // create a new DatePickerDialog with values you want to show

        DatePickerDialog da = new DatePickerDialog(this, mDateSetListener,
                mYear, mMonth, mDay);
        Calendar c = Calendar.getInstance();

        c.add(Calendar.DATE, 1);
        Date newDate = c.getTime();
        da.getDatePicker().setMinDate(newDate.getTime());
        return da;
        // create a new TimePickerDialog with values you want to show
    case 2:
        // create a new DatePickerDialog with values you want to show
        DatePickerDialog da1 = new DatePickerDialog(this,
                mDateSetListener2, mYear, mMonth, mDay);
        Calendar c1 = Calendar.getInstance();

        c1.add(Calendar.DATE, 1);
        Date newDate2 = c1.getTime();
        da1.getDatePicker().setMinDate(newDate2.getTime());
        return da1;

    }
    return null;
}
仅使用“用于调用”对话框 展示对话(1)

试试这个:

// set date picker with current date
DatePickerDialog date = new DatePickerDialog(this, datePickerListener, mYear,mMonth,mDay){
            // Comapre the date selected in picker with the current date.      
            @Override
            public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth)
            {   
                if (year < mYear)
                    view.updateDate(mYear,mMonth,mDay);

                if (monthOfYear < mMonth && year == mYear)
                    view.updateDate(mYear,mMonth,mDay);

                if (dayOfMonth < mDay && year == mYear && monthOfYear == mMonth)
                    view.updateDate(mYear,mMonth,mDay);

            }
        };
        return date;
    }        

private DatePickerDialog.OnDateSetListener datePickerListener = new DatePickerDialog.OnDateSetListener() {

    // as soon as the dialog box is closed, this method will be called.
    public void onDateSet(DatePicker view, int selectedYear,
            int selectedMonth, int selectedDay) {
        mYear = selectedYear;
        mMonth = selectedMonth;
        mDay = selectedDay;

        // set selected date into textview
        txtDate.setText(new StringBuilder().append(mMonth + 1)
                .append("-").append(mDay).append("-").append(mYear)
                .append(" "));    

    }
};
//使用当前日期设置日期选择器
DatePickerDialog date=新的DatePickerDialog(this,datePickerListener,mYear,Amnoth,mDay){
//将选择器中选择的日期与当前日期对齐。
@凌驾
公共无效onDateChanged(日期选择器视图,整数年,整数月,整数月)
{   
如果(年<年)
view.updateDate(mYear,mMonth,mDay);
如果(月日<月日<年==mYear)
view.updateDate(mYear,mMonth,mDay);
如果(月日<日和年==月日和月日==月日)
view.updateDate(mYear,mMonth,mDay);
}
};
返回日期;
}        
私有DatePickerDialog.OnDateSetListener datePickerListener=new DatePickerDialog.OnDateSetListener(){
//对话框关闭后,将立即调用此方法。
public void onDateSet(日期选择器视图,int selectedYear,
int selectedMonth,int selectedDay){
mYear=所选年份;
mMonth=所选的月份;
mDay=所选日期;
//将所选日期设置为文本视图
txtDate.setText(新的StringBuilder().append(mMonth+1)
.append(“-”).append(mDay).append(“-”).append(mYear)
.附加(“”);
}
};

etDateOfDelivery.setOnClickListener(新的OnClickListener(){

@覆盖
公共void onClick(视图v){
新建DatePickerDialog(SendOrderActivity.this,
新OnDateSetListener(){
@凌驾
公共无效onDateSet(日期选择器arg0,整数年,
整数月,整数日){

如果(月==intMonthOfYear&&day只需尝试此解决方案:

dpd.getDatePicker().setMinDate(System.currentTimeMillis() - 1000);

我设置了一个名为startbtn和listener的按钮,这样每当用户单击该按钮时,它都会提示一个日期选择器对话框,并将日期设置为一个名为startet的文本视图

//getting calendar instance
    calendar = Calendar.getInstance();
    year = calendar.get(Calendar.YEAR);
    month = calendar.get(Calendar.MONTH);
    day = calendar.get(Calendar.DAY_OF_MONTH);

startbtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            DatePickerDialog startDatePicker = new DatePickerDialog(Search.this, new DatePickerDialog.OnDateSetListener() {
                @Override
                public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
                    startet.setText(dayOfMonth + "-" + (month + 1) + "-" + year);
                    startDay = dayOfMonth;
                    startMonth = month + 1;
                    startYear = year;
                }
            }, year, month, day);
            //Disable date before today
            startDatePicker.getDatePicker().setMinDate(System.currentTimeMillis() - 1000);
            startDatePicker.show();
        }
    });

日期选择器只是生成日期的另一个选项,您可以从edittext字段中获取日期。因此,我个人认为这将是一种更简单的方法。如果是这样,请帮助我使用当前日期验证所选日期。我该如何做?您可以使用Calendar.getInstance()获取当前日期;但它显示此行的
IllegalArgumentException
:dpd.getDatePicker().setMinDate(newDate2.getTime());dpd.getDatePicker().setMinDate(System.currentTimeMillis());太好了,但是如果我在点击按钮时将
onDateSet
方法放入按钮中,为什么它不能识别
mDateSetListener
呢?我该如何解决这个问题?是的,现在我有一个小问题:当我在手机上安装它时,它有什么不起作用?我的意思是选择了不应该发生的以前的日期。在你的手机上,哪个安卓操作系统版本?好的,伙计,但是DatePickerDialog在我单击按钮即btnCalendar(参见布局中)后不会弹出,所以我应该将onClick放在哪里?
dpd.getDatePicker().setMinDate(System.currentTimeMillis() - 1000);
//getting calendar instance
    calendar = Calendar.getInstance();
    year = calendar.get(Calendar.YEAR);
    month = calendar.get(Calendar.MONTH);
    day = calendar.get(Calendar.DAY_OF_MONTH);

startbtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            DatePickerDialog startDatePicker = new DatePickerDialog(Search.this, new DatePickerDialog.OnDateSetListener() {
                @Override
                public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
                    startet.setText(dayOfMonth + "-" + (month + 1) + "-" + year);
                    startDay = dayOfMonth;
                    startMonth = month + 1;
                    startYear = year;
                }
            }, year, month, day);
            //Disable date before today
            startDatePicker.getDatePicker().setMinDate(System.currentTimeMillis() - 1000);
            startDatePicker.show();
        }
    });