Android 日期选择器对话框侦听器
我必须使用DatePickerDialog在文本视图中获取所选日期。当我单击文本视图时,DatePickerDialog应该出现 这是我写的Android 日期选择器对话框侦听器,android,android-widget,datepicker,textview,datepickerdialog,Android,Android Widget,Datepicker,Textview,Datepickerdialog,我必须使用DatePickerDialog在文本视图中获取所选日期。当我单击文本视图时,DatePickerDialog应该出现 这是我写的 private DatePickerDialog.OnDateSetListener dateOnDateSetListener = new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker view, int selecte
private DatePickerDialog.OnDateSetListener dateOnDateSetListener = new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int selectedYear, int selectedMonth, int selectedDay) {
datePick.setText(new StringBuilder().append(selectedDay).append("-").append(selectedMonth).append("-").append(selectedYear));
}
};
datePick = (TextView) findViewById(R.id.date_pick);
datePick.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Calendar calendar = Calendar.getInstance();
year = calendar.get(Calendar.YEAR);
monthOfYear = calendar.get(Calendar.MONTH);
dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
new DatePickerDialog(getContext(), dateOnDateSetListener, year, monthOfYear, dayOfMonth);
}
});
但它不起作用。
所以,我用谷歌搜索一下,就把它改成了这个,它还能工作,但我不明白为什么会这样?我把上面的代码搞乱了吗
datePick = (TextView) findViewById(R.id.date_pick);
datePick.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Calendar calendar = Calendar.getInstance();
year = calendar.get(Calendar.YEAR);
monthOfYear = calendar.get(Calendar.MONTH);
dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
showDialog(DATE_DIALOG_ID);
}
});
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case DATE_DIALOG_ID:
// set date picker as current date
return new DatePickerDialog(this, dateOnDateSetListener,
year, monthOfYear,dayOfMonth);
}
return null;
}
private DatePickerDialog.OnDateSetListener dateOnDateSetListener = new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int selectedYear, int selectedMonth, int selectedDay) {
datePick.setText(new StringBuilder().append(selectedDay).append("-").append(selectedMonth).append("-").append(selectedYear));
}
};
但它不起作用。所以我用谷歌搜索一下就把它改成了这个
它起作用了,但我不明白为什么会这样?我搞砸了吗
上面代码中的某些内容
datePick = (TextView) findViewById(R.id.date_pick);
datePick.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
Calendar calendar = Calendar.getInstance();
year = calendar.get(Calendar.YEAR);
monthOfYear = calendar.get(Calendar.MONTH);
dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
showDialog(DATE_DIALOG_ID);
}
});
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case DATE_DIALOG_ID:
// set date picker as current date
return new DatePickerDialog(this, dateOnDateSetListener,
year, monthOfYear,dayOfMonth);
}
return null;
}
private DatePickerDialog.OnDateSetListener dateOnDateSetListener = new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int selectedYear, int selectedMonth, int selectedDay) {
datePick.setText(new StringBuilder().append(selectedDay).append("-").append(selectedMonth).append("-").append(selectedYear));
}
};
你没有把事情搞砸,只是忘了在对话框中调用.show()
;i、 e:
new DatePickerDialog(getContext(), dateOnDateSetListener, year, monthOfYear, dayOfMonth).show();
它在第二个代码段中不使用.show()
的原因是活动管理对话框,因此将负责在onCreateDialog(int id)
中返回的对话框上调用该方法
一般来说,我建议使用第二种方法,因为您并不想自己管理对话框的生命周期,只是因为在配置更改等情况下重新创建活动时,要将其正确执行是一件非常痛苦的事情。但是,对于更现代的解决方案,使用片段,您应该考虑在(支持库中还有一个版本适用于蜂窝式设备之前的产品)