2012-02-29 65 views
4

实现在Android中DatePickerDatePickerDialog容易。但是,当涉及到数据存储,我有这些类问题:手动输入

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

但是当一年手动输入到输入字段(通过键盘)和用户,然后点击“保存”对话框中,将不会有任何的事件调用,你就无法得到那个手动输入值。

当用户改变与滑块手动重新输入后,在今年的东西它才有效。因为当你使用滑块时,事件被触发。

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

在此先感谢!

回答

8

就明确的重点,而Android将手动输入设置的数字

例如:。

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

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

这必须工作。

+0

它的工作原理就像一个魅力!谢谢内 – 2015-05-22 06:24:19

0

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

看一下对话框下方

enter image description here

即使你使用键盘输入日期,日期本身不被接受,直到你单击该对话框中的“设置”按钮,即当DatePickerDialog.OnDateSetListener回调被称为

1

我有同样的问题,接受的答案真的帮了我很多。我的情况有点不同,但我使用的是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();