Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.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 日期选择器对话框验证。。。!_Android_Validation_Datepicker - Fatal编程技术网

Android 日期选择器对话框验证。。。!

Android 日期选择器对话框验证。。。!,android,validation,datepicker,Android,Validation,Datepicker,我创建用于计算年龄的应用程序。 此应用程序工作正常,但现在我想在datepicker对话框中进行验证。 当用户通过日期选择器对话框设置日期时, 然后用户不能将出生日期设置为大于当前日期… 我该怎么办? 这是我的代码… AgeCalculator.java package com.example.agecalculator; import java.util.Calendar; import android.app.Activity; import android.app.DatePicke

我创建用于计算年龄的应用程序。
此应用程序工作正常,但现在我想在datepicker对话框中进行验证。
当用户通过日期选择器对话框设置日期时,
然后用户不能将出生日期设置为大于当前日期…
我该怎么办?
这是我的代码…
AgeCalculator.java

package com.example.agecalculator;

import java.util.Calendar;

import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.DatePicker;
import android.widget.TextView;

public class AgeCalculator extends Activity implements OnClickListener {
    TextView currentDate, birthDate, ageDisplay;
    AgeCalculation age = null;
    static final int DATE_START_DIALOG_ID = 0;
    private int startYear = 2015;
    private int startMonth = 0;
    private int startDay = 8;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        age = new AgeCalculation();
        currentDate = (TextView) findViewById(R.id.txtSysDate);
        currentDate.setText(age.getCurrentDate());
        birthDate = (TextView) findViewById(R.id.txtBirthDate);
        birthDate.setOnClickListener(this);
        ageDisplay = (TextView) findViewById(R.id.txtAge);
        Calendar valid = Calendar.getInstance();
        int validYear = valid.get(Calendar.YEAR);
        int validMonth = valid.get(Calendar.MONTH);
        int validDay = valid.get(Calendar.DAY_OF_MONTH);

    }

    @Override
    protected Dialog onCreateDialog(int id) {
        switch (id) {
        case DATE_START_DIALOG_ID:
            return new DatePickerDialog(this, mDateSetListener, startYear,
                    startMonth, startDay);
        }
        return null;
    }

    private final DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() {
        @Override
        public void onDateSet(DatePicker view, int selectedYear,
                int selectedMonth, int selectedDay) {
            startYear = selectedYear;
            startMonth = selectedMonth;
            startDay = selectedDay;
            age.setDateOfBirth(startYear, startMonth, startDay);
            birthDate.setText(selectedDay + "-" + (startMonth + 1) + "-"
                    + startYear);
            calculateAge();
        }
    };

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.txtBirthDate:
            showDialog(DATE_START_DIALOG_ID);
            break;

        default:
            break;
        }
    }

    private void calculateAge() {
        age.calcualteYear();
        age.calcualteMonth();
        age.calcualteDay();

        ageDisplay.setText(age.getResult());
    }
    // TODO Auto-generated method stub

}
AgeCalculation.java

package com.example.agecalculator;

import java.util.Calendar;

public class AgeCalculation {
    private Calendar end;
    private Calendar start;
    private int endYear;
    private int endMonth;
    private int endDay;
    private int startYear;
    private int startMonth;
    private int startDay;
    private int calYear;
    private int calMonth;
    private int calDay;

    public String getCurrentDate() {
        end = Calendar.getInstance();
        endYear = end.get(Calendar.YEAR);
        endMonth = end.get(Calendar.MONTH);
        endMonth++;
        endDay = end.get(Calendar.DAY_OF_MONTH);
        return endDay + "-" + endMonth + "-" + endYear;

    }

    public void setDateOfBirth(int sYear, int sMonth, int sDay) {
        startYear = sYear;
        startMonth = sMonth;
        startMonth++;
        startDay = sDay;

        if (sYear > endYear) {

        }

    }

    public void calcualteYear() {
        calYear = endYear - startYear;

    }

    public void calcualteMonth() {
        if (endMonth >= startMonth) {
            calMonth = endMonth - startMonth;
        } else {
            calMonth = endMonth - startMonth;
            calMonth = 12 + calMonth;
            calYear--;
        }

    }

    public void calcualteDay() {

        if (endDay >= startDay) {
            calDay = endDay - startDay;
        } else {
            calDay = endDay - startDay;
            calDay = 30 + calDay;
            if (calMonth == 0) {
                calMonth = 11;
                calYear--;
            } else {
                calMonth--;
            }

        }
    }

    public String getResult() {
        return "Day: " + calDay + "\n" + "Month:" + calMonth + "\n" + "Year:"
                + calYear;
    }

    public long getSeconde() {
        start = Calendar.getInstance();
        start.set(Calendar.YEAR, startYear);
        start.set(Calendar.MONTH, startMonth);
        start.set(Calendar.DAY_OF_MONTH, startDay);
        start.set(Calendar.HOUR, 12);
        start.set(Calendar.MINUTE, 30);
        start.set(Calendar.SECOND, 60);
        start.set(Calendar.MILLISECOND, 60);
        long now = end.getTimeInMillis();
        long old = start.getTimeInMillis();
        long diff = old - now;
        return diff / 1000;
    }

}

您可以做的是禁用对项目的选择

创建自己的ArrayAdapter子类,其中重写areAllItemsEnabled()以返回false,重写isEnabled()以根据需要返回true或false。

我找到了解决方案

我在应用程序中使用以下代码在
数据采集器
对话框
中进行集合验证

// Global declaration

    Calendar preferDate1 = new GregorianCalendar();
    Calendar preferDate2 = new GregorianCalendar();
    final Calendar c = Calendar.getInstance();
    year = c.get(Calendar.YEAR);
    month = c.get(Calendar.MONTH);
    day = c.get(Calendar.DAY_OF_MONTH);
    private int year, month, day;


    // here preferredDate1 and preferredDate2 are textview
    preferredDate1.setOnClickListener(new OnClickListener() {

                @SuppressLint("NewApi")
                @Override
                public void onClick(View v) {
                    DatePickerDialog dp = new DatePickerDialog(MainActivity.this, prefferedDate1Picker, preferDate1
                            .get(Calendar.YEAR), preferDate1.get(Calendar.MONTH), preferDate1.get(Calendar.DAY_OF_MONTH));
                    dp.getDatePicker().setMinDate(c.getTimeInMillis());
                    dp.show();
                }
            });

    private final DatePickerDialog.OnDateSetListener prefferedDate1Picker = new DatePickerDialog.OnDateSetListener() {

            @Override
            public void onDateSet(DatePicker view, int selectedYear, int selectedMonth, int selectedDay) {
                preferDate1 = new GregorianCalendar(selectedYear, selectedMonth, selectedDay);
                preferredDate2.setText("");
                preferredDate1.setText((selectedDay < 10 ? "0" + String.valueOf(selectedDay) : String.valueOf(selectedDay)) + "/"
                        + (selectedMonth + 1 < 10 ? "0" + String.valueOf((selectedMonth + 1)) : String.valueOf((selectedMonth + 1)))
                        + "/" + selectedYear);

            }
        };


// This will set date based on preferredDate1
// change here according to your need. If you want to add or remove one month then set based on data. In this I add one day in second data picker.
preferredDate2.setOnClickListener(new OnClickListener() {

            @SuppressLint("NewApi")
            @Override
            public void onClick(View v) {
                    DatePickerDialog dp2 = new DatePickerDialog(MainActivity.this, prefferedDate2Picker, preferDate2
                            .get(Calendar.YEAR), preferDate2.get(Calendar.MONTH), preferDate2.get(Calendar.DAY_OF_MONTH));

                    long mili = preferDate1.getTimeInMillis() + 86400000L;
                    dp2.getDatePicker().setMinDate(mili);
                    dp2.show();

            }
        });

        private final DatePickerDialog.OnDateSetListener prefferedDate2Picker = new DatePickerDialog.OnDateSetListener() {

        @Override
        public void onDateSet(DatePicker view, int selectedYear, int selectedMonth, int selectedDay) {
            preferDate2 = new GregorianCalendar(selectedYear, selectedMonth, selectedDay+1);
            preferredDate2.setText((selectedDay < 10 ? "0" + String.valueOf(selectedDay) : String.valueOf(selectedDay)) + "/"
                    + (selectedMonth + 1 < 10 ? "0" + String.valueOf((selectedMonth + 1)) : String.valueOf((selectedMonth + 1)))
                    + "/" + selectedYear);

        }
    };
//全局声明
日历首选日期1=新的GregorianCalendar();
Calendar preferDate2=新的GregorianCalendar();
最终日历c=Calendar.getInstance();
年份=c.get(日历年);
月=c.get(日历月);
day=c.get(日历,每月的第天);
私人整数年、月、日;
//这里preferredDate1和preferredDate2是文本视图
preferredDate1.setOnClickListener(新的OnClickListener(){
@SuppressLint(“新API”)
@凌驾
公共void onClick(视图v){
DatePickerDialog dp=new DatePickerDialog(MainActivity.this,PreferedDate1Picker,preferDate1
.get(Calendar.YEAR)、preferDate1.get(Calendar.MONTH)、preferDate1.get(Calendar.DAY/u MONTH));
dp.getDatePicker().setMinDate(c.getTimeInMillis());
dp.show();
}
});
private final DatePickerDialog.OnDateSetListener prefferedDate1Picker=新建DatePickerDialog.OnDateSetListener(){
@凌驾
公共void onDateSet(日期选择器视图,int-selectedYear,int-selectedMonth,int-selectedDay){
preferDate1=新的公历日历(选择的年份、选择的月份、选择的日期);
preferredDate2.setText(“”);
preferredDate1.setText((selectedDay<10?“0”+String.valueOf(selectedDay):String.valueOf(selectedDay))+“/”
+(selectedMonth+1<10?“0”+String.valueOf((selectedMonth+1)):String.valueOf((selectedMonth+1)))
+“/”+所选年份);
}
};
//这将根据preferredDate1设置日期
//根据你的需要在这里换车。如果要添加或删除一个月,请根据数据进行设置。在这里,我在第二个数据选择器中添加了一天。
preferredDate2.setOnClickListener(新的OnClickListener(){
@SuppressLint(“新API”)
@凌驾
公共void onClick(视图v){
DatePickerDialog dp2=新建DatePickerDialog(MainActivity.this,PreferedDate2Picker,preferDate2
.get(Calendar.YEAR)、preferDate2.get(Calendar.MONTH)、preferDate2.get(Calendar.DAY/u MONTH));
long mili=preferDate1.getTimeInMillis()+86400000L;
dp2.getDatePicker().setMinDate(mili);
dp2.show();
}
});
private final DatePickerDialog.OnDateSetListener prefferedDate2Picker=新建DatePickerDialog.OnDateSetListener(){
@凌驾
公共void onDateSet(日期选择器视图,int-selectedYear,int-selectedMonth,int-selectedDay){
preferDate2=新的公历日历(选择年份、选择月份、选择日期+1);
PreferredDate 2.setText((selectedDay<10?“0”+String.valueOf(selectedDay):String.valueOf(selectedDay))+“/”
+(selectedMonth+1<10?“0”+String.valueOf((selectedMonth+1)):String.valueOf((selectedMonth+1)))
+“/”+所选年份);
}
};