如何将一个 DatePickerDialog 用于多个 EditText
How to use one DatePickerDialog for multiple EditText
我有一个 activity 和 2 个 EditText(startDate 和 endDate)。
我创建了一个函数,我向它传递了一个 EditText,它会显示一个 DatePicker:
private void showDatePicker(EditText et) {
Calendar calendar = Calendar.getInstance();
DatePickerDialog picker = new DatePickerDialog(getActivity(), this, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH));
if (!Global.isEmpty(et)) {
try {
SimpleDateFormat sdf = new SimpleDateFormat(Global.USER_FRIENDLY_DATE_FORMAT, Locale.getDefault());
calendar.setTime(sdf.parse(et.getText().toString()));
} catch (ParseException e) {
Toast.makeText(getActivity(), "Error setting the date", Toast.LENGTH_SHORT).show();
}
}
picker.show();
}
当我选择一个日期时,我将收到一个包含所选日期的回调到 onDateSet() 函数。
我的问题是,我怎么知道它是哪个 EditText 的?
我知道有一个 "DatePicker view" 作为参数传递给 onDateSet(),但似乎无法弄清楚如何使用它,即使我应该。
您可以通过调用 picker.getDatePicker()
和 setTag()
为 DatepickerDialog
的 DatePicker 对象设置标签。可以从回调函数中的 datePicker 对象检索相同的标签 onDateSet()
喜欢
DatePickerDialog picker = new DatePickerDialog(getActivity(), listner , calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH));
DatePicker pick = picker.getDatePicker().setTag(et.getId());
和
public void onDateSet(DatePicker datePicker, int i, int i1, int i2) {
Log.d("", " " + datePicker.getTag());
// based on the returned tag you can decide what to do...
}
您可以使用它,因为这段代码在我的应用程序中有效
public void showDialog(EditText ed){
final EditText e = ed;
e.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final Calendar c = Calendar.getInstance();
int mYear = c.get(Calendar.YEAR); // current year
int mMonth = c.get(Calendar.MONTH); // current month
int mDay = c.get(Calendar.DAY_OF_MONTH); // current day
dpd = new DatePickerDialog(getActivity(), new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker datePicker, int year, int monthOfYear, int dayOfMonth) {
e.setText(dayOfMonth + " / "+ (monthOfYear+1) + " / " + year);
}
},mYear,mMonth,mDay);
dpd.show();
}
});
}
DatePickerDialog picker= new DatePickerDialog(getActivity(), this, year, month,day);
picker.getDatePicker().setTag("id")
我有一个 activity 和 2 个 EditText(startDate 和 endDate)。
我创建了一个函数,我向它传递了一个 EditText,它会显示一个 DatePicker:
private void showDatePicker(EditText et) {
Calendar calendar = Calendar.getInstance();
DatePickerDialog picker = new DatePickerDialog(getActivity(), this, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH));
if (!Global.isEmpty(et)) {
try {
SimpleDateFormat sdf = new SimpleDateFormat(Global.USER_FRIENDLY_DATE_FORMAT, Locale.getDefault());
calendar.setTime(sdf.parse(et.getText().toString()));
} catch (ParseException e) {
Toast.makeText(getActivity(), "Error setting the date", Toast.LENGTH_SHORT).show();
}
}
picker.show();
}
当我选择一个日期时,我将收到一个包含所选日期的回调到 onDateSet() 函数。
我的问题是,我怎么知道它是哪个 EditText 的?
我知道有一个 "DatePicker view" 作为参数传递给 onDateSet(),但似乎无法弄清楚如何使用它,即使我应该。
您可以通过调用 picker.getDatePicker()
和 setTag()
为 DatepickerDialog
的 DatePicker 对象设置标签。可以从回调函数中的 datePicker 对象检索相同的标签 onDateSet()
喜欢
DatePickerDialog picker = new DatePickerDialog(getActivity(), listner , calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH));
DatePicker pick = picker.getDatePicker().setTag(et.getId());
和
public void onDateSet(DatePicker datePicker, int i, int i1, int i2) {
Log.d("", " " + datePicker.getTag());
// based on the returned tag you can decide what to do...
}
您可以使用它,因为这段代码在我的应用程序中有效
public void showDialog(EditText ed){
final EditText e = ed;
e.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final Calendar c = Calendar.getInstance();
int mYear = c.get(Calendar.YEAR); // current year
int mMonth = c.get(Calendar.MONTH); // current month
int mDay = c.get(Calendar.DAY_OF_MONTH); // current day
dpd = new DatePickerDialog(getActivity(), new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker datePicker, int year, int monthOfYear, int dayOfMonth) {
e.setText(dayOfMonth + " / "+ (monthOfYear+1) + " / " + year);
}
},mYear,mMonth,mDay);
dpd.show();
}
});
}
DatePickerDialog picker= new DatePickerDialog(getActivity(), this, year, month,day);
picker.getDatePicker().setTag("id")