2013-07-01 2 views
5

Использую TimePickerDialog с помощью метода onTimeSet(). Я добавил кнопку cancel с onClickListener.
Моя проблема в том, что когда я нажимаю кнопку cancel, вызывается метод onTimeSet(). Почему это? Любой способ решить эту проблему?TimePickerDialog: Нажатие кнопки «Отмена» вызывает методTimeSet()

// Create timePicker and set listener 
timeListener = new TimePickerDialog.OnTimeSetListener() { 

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


     }; 

    timePicker = new TimePickerDialog(RS_CreateTripActivity.this, 
       timeListener, hour, min, false); 
    timePicker.setCanceledOnTouchOutside(false); 
    timePicker.setCancelable(false); 

    // Set negative button click listener 
    timePicker.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel", 
       new DialogInterface.OnClickListener() { 

     @Override 
     public void onClick(DialogInterface dialog, int which) { 
         datePicker.dismiss(); 
     } 
}); 

Я попытался, установив positive кнопку с onClickListener, но в этом случае я не мог времени, выбранного пользователем. Если кто-нибудь скажет мне, как получить время в пределах onClickListener, тогда это также решит мою проблему.

+1

Сначала он вводит метод 'onClick', а затем' onTimeSet'. Таким образом, используется логическая переменная, чтобы проверить, введен ли она методом «onClick». И это произошло, тогда не выполняйте никакого кода в методе 'onTimeSet'. – Geek

+0

Пожалуйста, найдите текущее решение здесь: https://stackoverflow.com/questions/4724781/timepickerdialog-cancel-button/47043247#47043247 – Deepti

ответ

1

Возникла проблема с DatePickerDialog и TimePickerDialog (проблема № 34833). Вы можете использовать счетчик в качестве рабочего процесса, чтобы избавиться от этой проблемы. Pls. обратитесь к: Date Picker with cancel option in android

+0

счетчик не решает проблему. – Geek

+0

Вы видели проблему, упомянутую в 34833? – lokoko

+0

Решение проблемы выполняется здесь: https://stackoverflow.com/questions/4724781/timepickerdialog-cancel-button/47043247#47043247 – Deepti

2

Вы должны использовать этот путь.

private TimePickerDialog.OnTimeSetListener mTimeSetListener = 
      new TimePickerDialog.OnTimeSetListener() { 
       public void onTimeSet(TimePicker view, int hourOfDay, int minute) { 
        mHour = hourOfDay; 
        mMinute = minute; 
        time = ""+mHour+":"+mMinute; 

      } 
    }; 



@Override 
    protected Dialog onCreateDialog(int id) { 
     switch (id) { 
     case TIME_DIALOG_ID: 
      TimePickerDialog myTime = new TimePickerDialog(this,mTimeSetListener, h, m, false); 
      myTime(new DialogInterface.OnCancelListener(){ 
      @Override 
      public void onCancel(DialogInterface arg0) { 
       //your cancel task. 
      } 
      );//For cancel button 

     return myTime; //Return the dialog 
     break; 
     return null; 
    } 

Работа подобна очарованию.

+0

Я не расширяю 'DialogFragment'. Будет ли работать метод onCreateDialog? Является ли 'TIME_DIALOG_ID', ваша переменная или объявлена ​​в SDK? – Geek

+0

Объявлен ли он вами или уже объявлен в SDK? – Geek

+0

Встраивается в sdk, так что проблема? – Harshid