2017-02-24 11 views
0

상의 글고 치기 위해 OnFocusChangeListener을 원샷 내 EditText에 대한 OnFocusChangeListener 한 샷. 즉, EditText이 포커스를 받으면 포커스 무언가를하고 초점 변경 이벤트를 듣지 않습니다. 나는 구현할 필요가 안드로이드

나는 나의 EditText에 ananymous OnFocusChangeListener을 할당합니다. 그런 다음 void onFocusChange(View v, boolean hasFocus)에서 나는 v.setOnFocusChangeListener(null);

그것은 작동을 부르지 만, 그것의 자신의 방법 onFocusChangeOnFocusChangeListener을 null로 가능한 이유 궁금하다. Java 메모리 모델에서 뭔가 빠졌다고 생각합니다.

코드

은 다음과 같습니다 :

mEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
    @Override 
    public void onFocusChange(View v, boolean hasFocus) { 
     if (hasFocus) { 
      // do something 
      v.setOnFocusChangeListener(null); 
     } 
    } 
}); 
+0

, 당신이 루프에서 발생하지 않습니다 어떻게 생각 ... 나는 다소 잘 설명 바랍니다. 'EditText'는'OnFocusChangeListener' 인터페이스를 구현합니다. 먼저 listener를 설정 한 다음 해당 listener를 제거합니다. 왜 문제가 있을까요? 내가 https://developer.android.com/reference/android/widget/EditText.html에서 보는 바와 같이 – azizbekian

+0

@azizbekian,'EditText'는'OnFocusChangeListener' –

+1

내 잘못을 구현하지 않습니다. 그 Listener를 유지하는'ListenerInfo'라는 정적 내부 클래스가'View'에 있습니다. [소스 코드] (https://github.com/android/platform_frameworks_base/blob/master/core/java/android/view/View.java#L3566) – azizbekian

답변

1

망가 패닉, 개체를 해가 기운 다. View 개체에 OnFocusChangeListener mOnFocusChangeListener이 있습니다. 귀하의 기억에 16을 가리 키도록 지시한다고합니다.

당신은 그것을 새로운 객체를 할당 할 수 있으며, 포인트는 주소 29에서 말할 수 그러나 실행하는 기능은 개체에서 OS가 초점의 변화를 가져옵니다 (16)

그냥 다음 시간에이 시작됩니다, 그들은 메모리 29에있는 객체에서 함수를 트리거합니다. 이것은 16에서 객체에 대해이 함수를 마지막으로 사용하는 방식입니다.

29 대신에 null을 가리키면 동일하게 작동합니다 . 내가 알 수있는 바와 같이

+0

알아. I가 호출 한 후에는'editText.setOnFocusChangeListener은 (새 View.OnFocusChangeListener() {}는'보호 필드'OnFocusChangeListener' 16를 해결하기 위해 참조 및 방법'onChange'이 인스턴스에서 호출을 보유하고 있습니다. 당신이 어떤 증거가 있습니까 자바 문서에서? 그리고 죄송 니트 - 따기,하지만 난이 OnFocusChangeListener mOnFocusChangeListener_을 _protected 보았을 때, 나는 그것에 스트레스를하고 싶었 생각 대신 이탤릭체의 _protected OnFocusChangeListener mOnFocusChangeListener_.에 대한'code'을 사용하지 않는 것입니다. –

+1

을 내가 더이 증거는 직장에서의 문제 해결에서 나온다. 내가 이것을 말할 때 나는 98 % 확신한다. 그것은 나를 위해 일하기 때문이다. 그러나 나는 어디에서나 그것을 결코 읽지 않는다. –