【问题标题】:How to use one DatePickerDialog for multiple EditText如何将一个 DatePickerDialog 用于多个 EditText
【发布时间】:2015-10-13 18:15:12
【问题描述】:

我有一个包含 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 视图”作为参数传递给 onDateSet(),但似乎无法弄清楚如何使用它,或者即使我应该使用它。

【问题讨论】:

  • 看看这个post

标签: android android-datepicker


【解决方案1】:

您可以通过调用 picker.getDatePicker()setTag() 将标签设置为 DatepickerDialog 的 DatePicker 对象。可以从回调函数 onDateSet() 中的 datePicker 对象中检索相同的标签

喜欢

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...

}

【讨论】:

  • 不,这个 if 语句应该在 onDateSet() 中,它是一个侦听器回调,我没有对 EditText 的引用。当然,除非我将“选择的”EditText 设置为全局变量。但是,我想知道是否可以使用从 onDateSet() 传递的 DatePicker 来实现这一点。
  • 在创建对话框时尝试在 DatePicker 对象中设置一个标签,并在回调中获取它以进行比较。
  • 我也想过这个,但是picker对象上没有setTag方法:)
  • 在 OnDateSet 方法() 中使用 picker.getDatePicker().setTag(et.getId()) 和 getTag。这将起作用..如果您不喜欢比较ID,可以使用其他东西设置为标签...我将编辑答案。
  • 成功了!此解决方案是最好的,而不是使用全局变量来保存选定的编辑文本。谢谢
【解决方案2】:

您可以使用此代码,因为此代码在我的应用程序中运行

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();
        }
    });
}

【讨论】:

    【解决方案3】:
    DatePickerDialog picker= new DatePickerDialog(getActivity(), this, year, month,day);
    picker.getDatePicker().setTag("id")
    

    【讨论】:

      猜你喜欢
      • 2011-05-16
      • 1970-01-01
      • 2021-08-03
      • 1970-01-01
      • 2015-01-01
      • 2015-03-05
      • 1970-01-01
      • 2014-03-22
      • 2012-08-27
      相关资源
      最近更新 更多