6

Sto cercando di impostare un intervallo di 10 minuti in Android DialogFragment (suggerito da Google), ma davvero non si può trovare un modo per farlo.Come posso impostare un intervallo di minuto in DialogFragment

Ecco wich classe frammento mostra la finestra di dialogo:

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); 
    } 

Tutto funziona come previsto, ma quello che mi serve è quello di permettere all'utente di scegliere intervalli di soli di 10 minuti - per esempio 1:10, 1 : 20, 1:30, 1:40 ecc ...

e 'possibile modificarlo, o estendere in qualche modo, al fine di soddisfare le mie esigenze? So che mi manca un punto fondamentale qui, ma come novellino non sono in grado di individuarlo.

EDIT

Qui miei punti di vista sono:

enter image description here

+1

Una rapida ricerca su Google mi ha lasciato a questa risposta: http://stackoverflow.com/ domande/7713538/how-to-set-a-custom-minuti-interval-in-timepickerdialog-in-android/19970113 # 19970113 – cYrixmorten

+0

@cYrixmorten ho provato e non funziona. basta moltiplicare i minuti per il valore dell'intervallo. Inoltre non vi è alcun cambiamento visivo sul picker. :( – Slim

+0

Che ne dite di creare il proprio personalizzato timepickerdialog utilizzando viste TimePicker come http://stackoverflow.com/questions/2580216/android-timepicker-minutes-to-15? TimePicker permette di impostare quali valori ha, così si potrebbe avere [ "10", "20", "30", ..] come le opzioni per minuti – cYrixmorten

risposta

4

È possibile impostare i propri valori al 2 ° numero di picker (il numero minuto selettore), con una chiamata di setDisplayedValues. Tuttavia, per prima cosa è necessario trovare la vista NumberPicker.

Android Device Monitor, ha una bella caratteristica di catturare schermo del dispositivo e le viste separate, in modo da poter trovare l'id (o un percorso) per la visualizzazione desiderata:

enter image description here

Dal momento che il nuovo array valore contiene 6 valori (0 ... 5), sarà necessario convertire i minuti correnti in decine, in modo da non andare fuori portata.

Ecco un esempio completo:

@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:

Quando si utilizza AppCompat tema, la finestra mostrerà un cursore circolare, che è non personalizzabile. Tuttavia si può dire la finestra di dialogo di utilizzare un tema più recente (che non sarà un problema, perché il vostro minSdk è 15):

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

c'è un errore 'tentativo di richiamare il metodo virtuale 'android.view.View android.view.ViewGroup.getChildAt (int)' su un oggetto reference' nulla al 'ViewGroup layout = (ViewGroup) tpLayout.getChildAt (0);' :( – Slim

+0

@Slim stai usando lo stesso codice esattamente come nella mia risposta il tuo errore potrebbe significare la disposizione non è ancora gonfiato o è? diverso da quello che ha il mio 'TimePickerDialog'. Confermare quale è, usando il metodo che ho postato (con Android Device Monitor) – Simas

+0

Puoi controllare la mia modifica – Slim