如何将一个 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")