마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

TimePickerDialog 관련 Error 문의 드립니다.

0 추천

제가 알람 어플을 만들어서 구글 플레이 스토어에 올렸는데 

일부 기기에서 TimePickerDialog 의 동작에 Error가 나는 것을 발견했습니다.

다음과 같은 Error가 납니다.

1. "취소" 버튼이 없음.

    왼쪽이 정상동작하는 휴대폰이고 오른쪽이 문제가 발생한 기기의 모습입니다.

    문제가 있는 상태를 보시면 "취소" 버튼이 없고 단지 "저장" 버튼만 있습니다.

정상 모양            

 

2. BackButton을 누르거나 대화상자 바깥쪽을 눌러도 저장됨.

    문제가 된 기기에서는 BackButton을 누르거나 대화상자 바깥쪽을 누르면

    "취소" 가 되지 않고 바로 "저장"이 되어 버립니다.

 

3. "저장" 버튼을 누르면 2번 저장됨.

    아래 그림처럼 "저장" 버튼을 1번만 눌러도 2번 저장됩니다.

     

 

이렇게 3가지 문제가 발생하여 Google에서 관련 내용을 찾으니 datepickerdialog의 문제이지만

문제 내용은 완전히 동일한 것을 찾았습니다. 

http://stackoverflow.com/questions/11444238/jelly-bean-datepickerdialog-is-there-a-way-to-cancel

계속 내용을 읽어보니 가장 아래 쪽에는 TimepickerDialog에 대한 부분도 있는데, "Set"과 "Cancel"

버튼을 따로 만들어서 동작하게 하라는 내용이어서 그대로 만들어서 해보았습니다.

 

결과는 문제가 생긴 기기에서는 원하는 대로 동작했습니다만,

기존에 잘되던 기기에는 "Set" 버튼을 눌러도 OnTimeSetListener()가 동작하지 않는 문제가 발생합니다.

 

여기서 질문드립니다.

1. 위의 발생한 3가지 문제를 해결하는 방법이 없을까요?

2. 꼭 "Set" 버튼과 "Cancel" 버튼을 만들어서 해야 한다면 "Set" 버튼을 눌렀을때 OnTimeSetListener()가 동작하게

   하려면 어떻게 해야 하나요?

 

며칠째 해결이 않되서 거의 멘붕 상태입니다. 도움 부탁드립니다.

 

"Set" 버튼과 "Cancel" 버튼을 넣어서 고친 현재 코드는 다음과 같습니다.

 

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

		 @Override
		 public void onTimeSet( TimePicker view, int hourOfDay, int minute )
		 {
		       if ( isShow )
			 {
			       isShow = false;
      		               Calendar calSet = CompareTimeNow(hourOfDay, minute, 0);
				long storeTime = calSet.getTimeInMillis();
				long storeTime2 = storeTime + (30*1000);
				              		   
				AlarmInsertActivity insert = new AlarmInsertActivity();
				insert.addInputDirect(storeTime, hourOfDay, 
                                          minute, mRingtone_path, mRingtone_name, maxVolume);
				 AlarmSet.setAlarm(getApplicationContext(), mLastAlarmId+1, true);
				 AlarmSet.popTimeToast(getApplicationContext(), storeTime2);
                                 updateListUI();
                                 mLastAlarmId = loadSqliteSeq();
				                        
		          }
                }               
}, c.get(Calendar.HOUR_OF_DAY), c.get(Calendar.MINUTE), false );

timeDlg.setButton( TimePickerDialog.BUTTON_NEGATIVE, getText(android.R.string.cancel), new DialogInterface.OnClickListener()
 {
      @Override
       public void onClick( DialogInterface dialog, int which )
        {
                  isShow = false;
         }
 } );

timeDlg.setButton( TimePickerDialog.BUTTON_POSITIVE, getText(android.R.string.ok), new DialogInterface.OnClickListener()
  {
	  @Override
           public void onClick( DialogInterface dialog, int which )
          {
	        isShow = true;
	   }
} );
	
timeDlg.show();

 

 

 

잠탱 (140 포인트) 님이 2014년 9월 18일 질문
잠탱님이 2014년 9월 18일 수정

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...