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)))
+“/”+所选年份);
}
};