开发者

TimePickerDialog and TimePicker

开发者 https://www.devze.com 2023-04-02 17:07 出处:网络
onCreate(...) { ... showDialog(TIME_DIALOG_ID); timePicker = (TimePicker) findViewById(R.id.timePicker);
onCreate(...) {
...
showDialog(TIME_DIALOG_ID);
timePicker = (TimePicker) findViewById(R.id.timePicker);
timePicker.setIs24HourView(true);
...
Button btnOpen = (Button) findViewById(R.id.btnSet);
btnOpen.setOnClickListener(new View.OnClickListener() {
     public void onClick(View v) {
        Toast.makeText(getBaseContext(),
                       “Time selected:” +
                       timePicker.getCurrentHour().toString() +
                       “:” + timePicker.getCurrentMinute().toString(),
                       Toast.LENGTH_SHORT).show();
     }
}

onCreateDialog(...) {
    return new TimePi开发者_开发知识库ckerDialog(...)
}

Above is a code sample from an Android book. I was wondering how timePicker knows the current hour and current minute. timePicker is only defined in onCreate. When onCreateDialog is called with showDialog(), it returns a TimePickerDialog that in no way seems to know about timePicker, yet timePicker is able to get the current hour and minute to toast it.


TimePickerDialog contains a TimePicker widget which in turn implements code for getting the current time. The sample code is referencing the TimePicker in TimePickerDialog directly by assuming that TimePickerDialog will always contain a TimePicker with the id: timePicker.

However, you don't need to magically know the id of the TimePicker. You can implement the TimePicker.OnTimeChangedListener callback interface which has access to the embedded TimePicker via the onTimeChanged (TimePicker view, int hourOfDay, int minute) method as illustrated in this Time Picker tutorial instead.


When you call showDialog(), the dialog is created in the Activity's View hierarchy. So when the next line does findViewById(R.id.timePicker), it finds the TimePicker inside the dialog, presumably which has the id of timePicker, and saves a reference to it in timePicker.


On onCreate Method you only have the reference.

when you click on btnOpen you call getCurrentHour() and getCurrentMinute() to get the current time.

0

精彩评论

暂无评论...
验证码 换一张
取 消