6

Tôi đang cố gắng đặt khoảng thời gian 10 phút trong android DialogFragment (được đề xuất bởi google), nhưng tôi thực sự không thể tìm được cách để thực hiện.Làm cách nào để đặt khoảng thời gian một phút trong Hộp thoại

Đây là Mà lớp mảnh cho thấy hộp thoại:

public class TimePickerFragment extends DialogFragment 
     implements TimePickerDialog.OnTimeSetListener { 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     // Use the current time as the default values for the picker 
     final Calendar c = Calendar.getInstance(); 
     int hour = c.get(Calendar.HOUR_OF_DAY); 
     int minute = c.get(Calendar.MINUTE); 

     // Create a new instance of TimePickerDialog and return it 
     return new TimePickerDialog(getActivity(), this, hour, minute, 
       DateFormat.is24HourFormat(getActivity())); 
    } 

    public void onTimeSet(TimePicker view, int hourOfDay, int minute) { 

     String realMinute= ""; 

     switch (minute) { 
      case 1: 
       realMinute = "01"; 
       break; 
      case 2: 
       realMinute = "02"; 
       break; 
      case 3: 
       realMinute = "03"; 
       break; 
      case 4: 
       realMinute = "04"; 
       break; 
      case 5: 
       realMinute = "05"; 
       break; 
      case 6: 
       realMinute = "06"; 
       break; 
      case 7: 
       realMinute = "07"; 
       break; 
      case 8: 
       realMinute = "08"; 
       break; 
      case 9: 
       realMinute = "09"; 
       break; 
      default: 
       realMinute = String.valueOf(minute); 
       break; 
     } 

     final String selectedDate = String.valueOf(hourOfDay) + ":" + realMinute; 
     EditText selectedTimeTxt = (EditText) getActivity().findViewById(R.id.selectedTime); 
     selectedTimeTxt.setText(selectedDate); 
    } 

Tất cả mọi thứ hoạt động như mong đợi, nhưng những gì tôi cần là để cho phép người dùng chỉ chọn khoảng thời gian 10 phút - ví dụ 1:10, 1 : 20, 1:30, 1:40 vv ...

Có thể sửa đổi hoặc mở rộng bằng cách nào đó để phù hợp với nhu cầu của tôi không? Tôi biết rằng tôi đang thiếu một điểm cơ bản ở đây, nhưng là một newbie tôi không thể phát hiện ra nó.

EDIT

đây quan điểm của tôi là:

enter image description here

+1

Tìm kiếm nhanh trên Google cho phép tôi trả lời câu hỏi này: http://stackoverflow.com/ question/7713538/how-to-set-a-custom-phút-interval-in-timepickerdialog-in-android/19970113 # 19970113 – cYrixmorten

+0

@cYrixmorten Tôi đã thử nó và nó không hoạt động. nó chỉ nhân số phút với giá trị khoảng thời gian. Ngoài ra không có thay đổi trực quan trên bộ chọn teh. :( – Slim

+0

Làm thế nào về việc tạo ra timepickerdialog tùy chỉnh của riêng bạn bằng cách sử dụng các khung nhìn TimePicker như http://stackoverflow.com/questions/2580216/android-timepicker-minutes-to-15? TimePicker cho phép bạn đặt giá trị của nó, vì vậy bạn có thể có ["10", "20", "30", ..] làm tùy chọn cho phút – cYrixmorten

Trả lời

4

Bạn có thể đặt giá trị của riêng bạn để chọn số 2 (số picker phút), với một cuộc gọi của setDisplayedValues. Tuy nhiên, trước tiên bạn cần tìm giao diện NumberPicker.

Android Device Monitor, có một tính năng tốt đẹp của chụp màn hình của thiết bị và các quan điểm riêng, vì vậy bạn có thể tìm id (hoặc một đường dẫn) để xem truy nã của bạn:

enter image description here

Kể từ mới của bạn mảng giá trị chứa 6 giá trị (0 ... 5), bạn sẽ cần phải chuyển đổi các phút hiện tại thành hàng chục, vì vậy bạn không đi ra ngoài phạm vi.

Dưới đây là một ví dụ hoàn chỉnh:

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
    final Calendar c = Calendar.getInstance(); 
    int hour = c.get(Calendar.HOUR_OF_DAY); 
    // Convert current minutes to tens 
    // 55 = 50, 56 = 00 
    int minute = c.get(Calendar.MINUTE)/10; 
    minute = (minute > 5) ? 0 : minute; 

    // Create a new instance of TimePickerDialog and return it 
    final TimePickerDialog tpd = new TimePickerDialog(getActivity(), this, hour, minute, 
      DateFormat.is24HourFormat(getActivity())); 

    tpd.setOnShowListener(new DialogInterface.OnShowListener() { 
     @Override 
     public void onShow(DialogInterface dialog) { 
      int tpLayoutId = getResources().getIdentifier("timePickerLayout", "id", "android"); 

      ViewGroup tpLayout = (ViewGroup) tpd.findViewById(tpLayoutId); 
      ViewGroup layout = (ViewGroup) tpLayout.getChildAt(0); 

      // Customize minute NumberPicker 
      NumberPicker minutePicker = (NumberPicker) layout.getChildAt(2); 
      minutePicker.setDisplayedValues(new String[]{"00", "10", "20", "30", "40", "50"}); 
      minutePicker.setMinValue(0); 
      minutePicker.setMaxValue(5); 
     } 
    }); 

    return tpd; 
} 

public void onTimeSet(TimePicker view, int hourOfDay, int minute) { 
    minute = minute * 10; 
    Toast.makeText(getActivity(), "Selected minute: " + minute, Toast.LENGTH_LONG).show(); 
} 

Edit:

Khi sử dụng theme AppCompat, hộp thoại sẽ hiển thị một thanh trượt tròn, đó là uncustomizable. Tuy nhiên, bạn có thể yêu cầu hộp thoại sử dụng chủ đề mới hơn (sẽ không thành vấn đề vì minSdk của bạn là 15):

final TimePickerDialog tpd = new TimePickerDialog(getActivity(), 
     android.R.style.Theme_Holo_Light_Dialog, this, hour, minute, 
     DateFormat.is24HourFormat(getActivity())); 
+0

Có lỗi 'Cố gắng gọi phương thức ảo' android.view.View android.view.ViewGroup.getChildAt (int) 'trên một tham chiếu đối tượng null' tại 'ViewGroup layout = (ViewGroup) tpLayout.getChildAt (0);' :( – Slim

+0

@Slim là bạn đang sử dụng đúng mã giống như trong câu trả lời của tôi? Lỗi của bạn có thể có nghĩa là bố cục chưa được tăng cao hoặc khác với cái mà tôi 'TimePickerDialog' có. Xác nhận cái nào là của nó, bằng cách sử dụng phương pháp tôi đã đăng (với Android Device Monitor) – Simas

+0

Bạn có thể kiểm tra bản chỉnh sửa của tôi – Slim

Các vấn đề liên quan