안드로이드 4.1(언승욱 빈스) 이후 Time Picker Dialog의 움직임은 이해할 수 없다

5665 단어 AndroidJava

TimePickerDialog 소개


그렇습니다. 시간을 설정하는 대화상자입니다.
그림은 ICS(Android 4.0.4)

ICS에는 취소 및 설정 버튼이 구성되어 있습니다.
물론 취소 버튼을 누르면 입력이 없고, 설정을 누르면 입력이 완성된다.

언승욱 빈스 이후에 (4.4.2 Kitkat 확인까지)라면?


이렇게 되다

취소 버튼이 없어졌습니다. 설정 버튼이'완성'이 되었습니다.
신기한 건 여기서부터 시작이야.
  • 후퇴 단추를 통해 닫아도 onTimeset()을 호출하여 입력을 완료합니다.
  • 상자 밖에서 대화상자를 닫으려면 onTimeset () 을 호출해서 입력을 완료합니다.
  • 완성 버튼을 클릭한 후 원타임셋()을 두 번 호출했다.
  • 왜?


    일부러 그런 건지 모르겠다.
    빈대야?이것 괜찮아요?

    코드는요?


    4.0.4사이즈로 이렇습니다.


    TimePickerDialog.java
    public void onClick(DialogInterface dialog, int which) {
        if (mCallback != null) {
            mTimePicker.clearFocus();
            mCallback.onTimeSet(mTimePicker, mTimePicker.getCurrentHour(),
                    mTimePicker.getCurrentMinute());
        }
    }
    
    버튼을 누르면 답장의onTimeset을 호출합니다.
    다만, 구조기에서 버튼 설정을 하고 버튼 설정을 완성하면 호출이 이뤄지고, 취소 버튼은 원래 OnClickListener를 설정하지 않았기 때문에 onClick이라고 부르지 않는다.
    따라서 완료 단추를 눌렀을 때만 onTimeset을 호출하고 완료를 입력할 수 있습니다.
    그럼 언승욱 빈스 다음은?

    4.1.1 코드는 이렇습니다.


    TimePickerDialog.java
    public void onClick(DialogInterface dialog, int which) {
        tryNotifyTimeSet();
    }
    
    public void updateTime(int hourOfDay, int minutOfHour) {
        mTimePicker.setCurrentHour(hourOfDay);
        mTimePicker.setCurrentMinute(minutOfHour);
    }
    
    public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
        /* do nothing */
    }
    
    private void tryNotifyTimeSet() {
        if (mCallback != null) {
            mTimePicker.clearFocus();
            mCallback.onTimeSet(mTimePicker, mTimePicker.getCurrentHour(),
                   mTimePicker.getCurrentMinute());
        }
    }
    
    @Override
    protected void onStop() {
        tryNotifyTimeSet();
        super.onStop();
    }
    
    언승욱 빈스 이후의 코드는tryNotifyTimeset()이라는 방법을 추가해 리셋을 호출하는onTimeset을 볼 수 있다.
    다만, 이 방법은 onClick과 onStop에서 호출됩니다.
    따라서 TimePickerDialog를 닫으면 onStop에서tryNotifyTimeSet을 호출하여 입력을 완성합니다.
    완료 단추를 누르면 onClick에서tryNotifyTimeset을 호출하면 대화상자가 닫힐 때의onStop도tryNotifyTimeset이라고 부릅니다.
    물론 휴면 단말기만 온타임셋이라고 부른다.
    입력을 취소할 수 없습니다.

    왜 이렇게 됐지


    어떻게 대처해야 할지...

    좋은 웹페이지 즐겨찾기