9

Tôi đã có một DialogPreference thực hiện một TimePicker.OnTimeChangedListener đơn giản (xem bên dưới). Đặt thời gian bằng cách nhấp vào nút +/- sẽ hoạt động tốt. Nhưng tôi không biết làm thế nào để lưu trạng thái của timepicker khi người dùng gõ vào thời gian trực tiếp vào textfield. Có thể đủ để truy cập vào giá trị trường văn bản hiện tại, vì vậy tôi có thể duy trì nó trong onDialogClosed. Nhưng timePicker.getCurrentHour() sẽ không làm điều đó. Xin vui lòng giúp ...Android: Cách lấy thời gian từ một TimePicker khi được nhập vào

public class TimePreference extends DialogPreference implements 
     TimePicker.OnTimeChangedListener { 
// ... 
@Override 
public void onTimeChanged(TimePicker view, int hours, int minutes) { 
    selectedHours = hours; 
    selectedMinutes = minutes; 
} 

@Override 
public void onDialogClosed(boolean positiveResult) { 
    if(positiveResult) { 
     String timeString = selectedHours + ":" + selectedMinutes; 
     if(isPersistent()) { 
      persistString(timeString); 
     } 
    } 
} 
// ... 
} 
+0

Vấn đề là onTimeChanged không được gọi cho đến khi văn bản trong TimePicker mất tập trung. Có ai biết làm thế nào để truy cập vào văn bản đầu vào TimePicker trực tiếp? – cody

+0

Bạn có thể kiểm tra câu trả lời của tôi ở đây http://stackoverflow.com/questions/7527138/timepicker-how-to-get-am-or-pm/23931797#23931797 – Mukesh

Trả lời

46

tôi đã không nhận thấy vấn đề này cho đến khi tôi stumbled khi câu hỏi này. Có một giải pháp đơn giản: Khi người dùng thay đổi ngày và giờ trong ứng dụng của tôi, tôi chỉ cần gọi kết thúc() và onPause() hoặc onStop() hoặc onDestroy() Tôi làm như sau:

// force the timepicker to loose focus and the typed value is available ! 
timePicker.clearFocus(); 
// re-read the values, in my case i put them in a Time object. 
time.hour = timePicker.getCurrentHour(); 
time.minute = timePicker.getCurrentMinute(); 

Sau khi tôi lưu trữ giá trị time.toMillis (false) trong cột thích hợp trong bảng của tôi.

Tôi không biết liệu trình theo dõi thời gian vẫn có thể truy cập được trong onDialogClosed của bạn (boolean positiveResult) hay không. Nếu không, hãy tìm một cuộc gọi lại khác để sử dụng khi nó vẫn còn.

Hy vọng điều này sẽ hữu ích.

+0

Cảm ơn ... công trình trọng tâm rõ ràng! :-) Tất cả có thể được thực hiện trong onDialogClosed. Tuyệt quá! – cody

+0

Câu trả lời này, thực sự đã cứu mạng tôi. – eitama

+0

Bạn có thể giải thích phần kết thúc cuộc gọi() không? Tôi không hiểu làm thế nào để u gọi kết thúc và nơi nào bạn làm điều đó? –

1

Chỉ có một cách giải quyết rất xấu cho đến nay ...

ViewGroup v = (ViewGroup) timePicker.getChildAt(0); 
ViewGroup numberPicker1 = (ViewGroup) v.getChildAt(0); 
ViewGroup numberPicker2 = (ViewGroup) v.getChildAt(1); 
String hours = ((EditText) numberPicker1.getChildAt(1)).getText().toString(); 
String mins = ((EditText) numberPicker2.getChildAt(1)).getText().toString(); 

selectedTime = hours+":"+mins; 
Các vấn đề liên quan