我在应用程序中实现 TimePicker 时遇到一些问题,该应用程序允许用户在插入数据库记录之前更改数据库记录的时间。
问题是,当按下 AM/PM 按钮时,不会调用 onTimeChanged(View, int, int) 方法。然而,每当我更改 TimePicker 的小时或分钟值时,都会调用 onTimeChanged() 。
应用场景:
- 用户只需单击 AM/PM 按钮:AM/PM 是NOT updated
- 用户单击小时/分钟:时间已更新
- 用户单击 AM/PM 按钮,然后更改小时/分钟:时间和 AM/PM 更新
我是否错误地认为应该能够单击“AM/PM”按钮来更新时间,而不必在“am/pm”按钮之后更改时间值?
我整理了一个小型测试项目来复制此内容,代码如下:
Activity
public class TestActivity extends Activity implements OnTimeChangedListener {
private Calendar mCalendar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.timepicker);
mCalendar = Calendar.getInstance();
TimePicker tp = (TimePicker)findViewById(R.id.timepicker);
tp.setIs24HourView(false);
tp.setOnTimeChangedListener(this);
}
@Override
public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
Log.d("TAG", "In onTimeChanged");
mCalendar.set(mCalendar.get(Calendar.YEAR),
mCalendar.get(Calendar.MONTH),
mCalendar.get(Calendar.DAY_OF_MONTH),
hourOfDay,
minute);
setCalendarTime();
}
private void setCalendarTime() {
Date date = mCalendar.getTime();
if (date != null) {
SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yy '@' h:mm a");
String dateTime = formatter.format(date);
Toast.makeText(this, dateTime, Toast.LENGTH_LONG).show();
}
}
}
时间选择器.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:fillViewport="true">
<TimePicker android:id="@+id/timepicker"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="5dip"
android:layout_marginRight="5dip"/>
</LinearLayout>