2013-03-01 16 views
6

Sto utilizzando il seguente codice per visualizzare un TimePickerDialog:TimePickerDialog.onTimeSetListener non chiamato

TimePickerDialog dialog = new TimePickerDialog(this, new OnTimeSetListener() { 

     @Override 
     public void onTimeSet(TimePicker view, int hourOfDay, int minute) { 
      System.out.println("onTimeSet"); 
     } 
    }, 20, 15, true); 
    dialog.setTitle("Test"); 
    dialog.setButton(TimePickerDialog.BUTTON_POSITIVE, "Done", new OnClickListener() { 

     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      System.out.println("Done"); 
     } 
    }); 
    dialog.setButton(TimePickerDialog.BUTTON_NEGATIVE, "Cancel", new OnClickListener() { 

     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      System.out.println("Cancel"); 
     } 
    }); 
    dialog.show(); 

Su un dispositivo con sistema operativo Android 2.3.7, il metodo onTimeSet non viene chiamato (i metodi onClick fanno) . Su un dispositivo con 4.2.2 il onTimeSet viene chiamato come dovrebbe.

Cosa sta succedendo qui?

risposta

15

TimePickerDialog è cambiato dopo Android 4.1.1 e vi è un bug relativo alla cancellazione di TimePickerDialog e DatePickerDialog. Si prega di leggere prima il here. Per impostazione predefinita non è necessario impostare il pulsante positivo e negativo. TimePickerDialog e DatePickerDialog gestiscono questi per voi. Quindi, se questo problema di cancellazione non è importante per te, cancella l'impostazione del pulsante positivo e negativo. Se si eliminano quelli in entrambe le versioni se l'utente fa clic sul pulsante OK, verrà chiamato il metodo onTimeSet.

Ma mi raccomando fino a che il bug non verrà risolto utilizzare AlertDialog personalizzato con widget TimePicker;

final TimePicker timePicker = new TimePicker(this); 
    timePicker.setIs24HourView(true); 
    timePicker.setCurrentHour(20); 
    timePicker.setCurrentMinute(15); 

    new AlertDialog.Builder(this) 
      .setTitle("Test") 
      .setPositiveButton(android.R.string.ok, new OnClickListener() { 

       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        Log.d("Picker", timePicker.getCurrentHour() + ":" 
          + timePicker.getCurrentMinute()); 
       } 
      }) 
      .setNegativeButton(android.R.string.cancel, 
        new OnClickListener() { 

         @Override 
         public void onClick(DialogInterface dialog, 
           int which) { 
          Log.d("Picker", "Cancelled!"); 
         } 
        }).setView(timePicker).show();