【问题标题】:Manual input not saved in Android's DatePicker(Dialog)手动输入未保存在 Android 的 DatePicker(Dialog) 中
【发布时间】:2012-02-29 19:45:37
【问题描述】:

在 Android 中实现 DatePickerDatePickerDialog 很容易。但是在数据存储方面,我对这些类有一个问题:

如果您使用微调器(+ 或 - 按钮)更改日期,一切正常。调用“日期更改”或“日期设置”事件,您可以获取用户输入的值。

但是当年份手动输入到输入字段(通过键盘)并且用户然后在对话框中单击“保存”时,将不会调用任何事件并且您不会获得手动输入的值。

仅当用户在手动输入年份后再次使用滑块更改某些内容时才有效。因为当您使用滑块时,会触发事件。

这是正常行为吗?如何实现所需的行为,即当用户手动输入内容然后单击“保存”时触发事件?

提前致谢!

【问题讨论】:

    标签: android dialog datepicker


    【解决方案1】:

    只需清除焦点,android会手动输入设置数字。

    例如:

    DatePicker datePicker = findViewById(R.id.dp);
    

    当像onClick()一样保存时,添加 datePicker.clearFocus();

    这一定有效。

    【讨论】:

      【解决方案2】:

      我遇到了同样的问题,接受的答案确实对我帮助很大。虽然我使用的是DatePickerDialog,但我的情况有点不同。以下是DatePicker 最终正常工作的方式。

      先声明变量,再定义变量。

      private DatePickerDialog.OnDateSetListener date;
      private DatePickerDialog mDatePickerDialog;
      private Calendar myCalendar;
      
      // Get the calendar instance
      myCalendar = Calendar.getInstance();
      
      // Define the date set listener first.
      date = new DatePickerDialog.OnDateSetListener() {
          @Override
          public void onDateSet(DatePicker view, int year, int monthOfYear,
              int dayOfMonth) {
              // Do something with year, monthOfYear and dayOfMonth
          }
      };
      
      // Now define the DatePickerDialog
      mDatePickerDialog = new DatePickerDialog(context, date, myCalendar.get(Calendar.YEAR), myCalendar.get(Calendar.MONTH), myCalendar.get(Calendar.DAY_OF_MONTH));
      mDatePickerDialog.setButton(DialogInterface.BUTTON_POSITIVE, "Set", new DialogInterface.OnClickListener() {
          public void onClick(DialogInterface arg0, int arg1) {
              DatePicker datePicker = mDatePickerDialog.getDatePicker();
      
              // The following clear focus did the trick of saving the date while the date is put manually by the edit text.
              datePicker.clearFocus();
              date.onDateSet(datePicker, datePicker.getYear(), datePicker.getMonth(), datePicker.getDayOfMonth());
          }
      });
      

      然后在按钮的onClick

      mDatePickerDialog.show();
      

      【讨论】:

        【解决方案3】:

        如果您查看Date Picker Example,只要用户单击对话框上的“SET”按钮,就会收到 DatePickerDialog.OnDateSetListener 回调。

        看下面的对话框

        即使您使用键盘输入日期,在您单击对话框中的“SET”按钮并且调用 DatePickerDialog.OnDateSetListener 回调之前,日期本身也不会被接受。

        【讨论】:

          猜你喜欢
          • 2021-01-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-08-20
          • 2013-09-17
          相关资源
          最近更新 更多