2012-08-22 2 views
0

여러 번 묻는 질문이지만 내 문제에 맞는 답을 찾을 수 없습니다.TimePickerDialog Cancel 단추가 데이터를 삭제하지 않음

그래서 '텍스트가 현재 시간 (활동이 액세스 된 시간) 인 버튼이있는 활동이 있습니다. 단추를 클릭하면 시간을 변경할 수있는 TimePickerDialog가 표시되고 '설정'단추를 클릭하면 단추가 새 시간으로 업데이트됩니다. 지금까지, 너무 좋았어.

내 문제는 TimePicker를 시작하고 시간을 변경하고 취소 버튼을 클릭 한 다음 TimePicker를 다시 실행하면 표시된 시간이 시작한 버튼에서 원래 시간 대신 취소 된 시간입니다. TimePicker를 취소하면 이전 데이터를 잊어 버리고 싶습니다. 당신은 결코 당신의 날짜를 다시 설정하라는없는

protected Dialog onCreateDialog(int id) { 
    switch (id) { 
    case TIME_DIALOG_ID: 
     recordTime = new TimePickerDialog(this,mTimeSetListener, mHour, mMinute, true); 
     recordTime.setOnCancelListener(new OnCancelListener(){ 

      @Override 
      public void onCancel(DialogInterface arg0) { 

final Calendar c = Calendar.getInstance(); 
       mHour = c.get(Calendar.HOUR_OF_DAY); 
       mMinute = c.get(Calendar.MINUTE); 
       recordTime.dismiss(); 
      } 
     }); 

     recordTime.setOnDismissListener(new OnDismissListener(){ 
      @Override 
      public void onDismiss(DialogInterface arg0) { 
       recordTime.cancel(); 
       recordTime.dismiss(); 
      } 

     }); 
     return recordTime; 

    } 
    return null; 
} 


// the callback received when the user sets the time in the dialog 
    private TimePickerDialog.OnTimeSetListener mTimeSetListener = 
     new TimePickerDialog.OnTimeSetListener() { 
      public void onTimeSet(TimePicker view, int hourOfDay, int minute) { 
       mHour = hourOfDay; 
       mMinute = minute; 
       updateTimeDisplay(); 
      } 
     }; 

답변

1

TimePicker를 취소하면 이전 데이터를 잊어 버리면됩니다.

showDialog()으로 대화 상자를 열 때마다 onPrepareDialog()을 통과 할 때마다 여기에 시간을 다시 설정하면됩니다.

@Override 
protected void onPrepareDialog(int id, Dialog dialog, Bundle args) { 
    switch (id) { 
    case TIME_DIALOG_ID: 
     recordTime.updateTime(mHour, mMinute); 
    } 
} 

쉽게뿐만 아니라 OnCancelListener이를 호출 할 수 있습니다 :

을 사용자가 Set을 클릭하면 대화 상자가이 원래 데이터를 복원 어떤 이유로 취소되면 새로운 시간, mHourmMinute에 저장됩니다
recordTime.setOnCancelListener(new OnCancelListener() { 
    @Override 
    public void onCancel(DialogInterface dialog) { 
     recordTime.updateTime(mHour, mMinute); 
    } 
}); 

원래 OnCancel 및 OnDismiss 수신기는 중복 된 것처럼 보입니다. 당신은 그들과 무엇을하려고합니까?

사용자가 Set, Cancel을 클릭하거나 뒤로 단추를 사용하는 경우 onDismiss()이 호출됨을 알아야합니다. 사용자가 Set을 클릭하면 onCancel() 메서드를 호출하지 않으려면 onDismiss()입니다. 동일한 방법으로 onCancel()onDismiss()을 취급하지 마십시오.

+0

고마워요. 나는 onPrepareDialog를 사용하는 것만으로 트릭을 발견했다. .setOnCancelListener를 단독으로 사용하면 원래 시간을 복원하지 못했습니다. – DaveSav

+0

실행중인 코드는 https://stackoverflow.com/questions/4724781/timepickerdialog-cancel-button/47043247#47043247에서 확인할 수 있습니다. – Deepti

0

:

여기 내 코드입니다. onCancel 방법으로 날짜/시간을 재설정하면 모든 것이 잘 작동합니다.

+0

어떻게하면됩니까? 빠른 테스트로서 나는 마지막 Calendar에 넣었다. c = Calendar.getInstance(); \t \t \t mHour = c.get (Calendar.HOUR_OF_DAY); \t \t \t mMinute = c.get (Calendar.MINUTE); 그러나 그것은 도움이되지 않았다. – DaveSav

+0

꽤 많이 :-) – AedonEtLIRA

+0

제안을 반영하도록 예제 코드를 변경했습니다. 하지만 여전히 작동하지 않습니다. – DaveSav

관련 문제