2013-03-01 12 views
6

Używam następujący kod do wyświetlania TimePickerDialog:TimePickerDialog.onTimeSetListener nie nazywa

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

na urządzeniu z systemem Android 2.3.7, metoda onTimeSet nie sprawdzony (metody onClick zrobić) . Na urządzeniu działającym pod 4.2.2 kod onTimeSet jest wywoływany tak, jak powinien.

Co się tutaj dzieje?

Odpowiedz

15

TimePickerDialog zmienił się po systemie Android 4.1.1 i jest błąd o anulowaniu obu TimePickerDialog i DatePickerDialog. Przeczytaj najpierw here. Domyślnie nie trzeba ustawiać przycisku dodatniego i ujemnego. TimePickerDialog i DatePickerDialog obsługują je za Ciebie. Jeśli więc ten problem z anulowaniem nie jest dla Ciebie ważny, usuń ustawienie przycisku dodatniego i ujemnego. Jeśli usuniesz te w obu wersjach, jeśli użytkownik kliknie przycisk OK, twoja metoda onTimeSet zostanie wywołana.

Ale polecam, dopóki ten błąd nie zostanie naprawiony, użyj niestandardowego AlertDialog z widżetem 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();