2011-08-23 10 views
27

안드로이드 앱 (또는 Java가 더 일반적이지 않은 경우 더 일반적으로)에서 변수 값이 변경 될 때마다 메소드를 호출하는 가장 좋은 방법은 무엇입니까?Android에서 변수가 변경 될 때마다 조치를 취하는 방법은 무엇입니까?

+0

변수를 변경하는 코드가 있어야합니다. 그 자체로 조치를 취하지 않으시겠습니까? –

+9

변수가 변경 될 때 액세스해야하는 객체가 변수를 변경하는 코드의 범위에 있지 않기 때문입니다. – tsvallender

답변

54

은 당신이 정말 이벤트가 발생할 때 리스너를 트리거하는 이벤트 구동 모델을 설정하고 싶은 (귀하의 경우, 변수 값이 변경되었습니다 말 : 당신은 귀하의 요구 사항에 따라 코드에 넣을 수 있습니다).

: 일반적으로이 다음 단계를 수행하여 완료

(그것은 단지 그것을 위해 반드시 아니지만) 특히 UI 프로그래밍의 맥락에서뿐만 아니라 자바에 대한,하지만 다른 프로그래밍 언어에 대한뿐만 아니라 매우 일반적입니다

  • 이벤트가 트리거 될 경우 리스너가 구현해야하는 인터페이스를 결정하십시오. 당신은 청취자가 여기에 처리하는 것이 중요하다고 생각되는 인자를 넣을 수


    public interface VariableChangeListener { 
     public void onVariableChanged(Object... variableThatHasChanged); 
    } 

: 귀하의 경우를 들어, 당신은 그것을 VariableChangeListener를 호출 할 수와 같은 인터페이스를 정의합니다. 인터페이스로 추상화함으로써 변수가 이벤트가 발생하는 클래스와 긴밀하게 결합하지 않고 변경된 경우 필요한 조치를 구현할 수 있습니다.

  • 이벤트가 발생한 클래스 (다시, 귀하의 경우 변수가 변경 될 수있는 클래스)에서 이벤트에 대한 수신기를 등록하는 메소드를 추가하십시오. 당신이 당신의 인터페이스 VariableChangeListener를 호출 할 경우에 당신은 기본적으로 같은

    // while I only provide an example with one listener in this method, in many cases 
    // you could have a List of Listeners which get triggered in order as the event 
    // occurres 
    public void setVariableChangeListener(VariableChangeListener variableChangeListener) { 
     this.variableChangeListener = variableChangeListener; 
    } 

이 아무도 (변수가 변경) 발생한 이벤트의 경우, 이벤트

  • 을 듣고되지 않는 방법이있을 것이다 당신은 t 코드가 다시


    if(variableValue != previousValue && this.variableChangeListener != null) { 
     // call the listener here, note that we don't want to a strong coupling 
     // between the listener and where the event is occurring. With this pattern 
     // the code has the flexibility of assigning the listener 
     this.variableChangeListener.onVariableChanged(variableValue); 
    } 

같은 것을 같을 것이다, 리스너를 트리거합니다 그는 기본적으로 이벤트 또는 변수 변경에 반응하는 프로그래밍의 매우 일반적인 관행입니다. Javascript에서는 onclick()의 ​​일부로, 안드로이드에서는 OnClickListenerButton onclick 이벤트로 설정된 것과 같이 다양한 청취자에 대한 이벤트 기반 모델을 확인할 수 있습니다. 귀하의 경우에는 변수가 변경 될 때마다 다른 이벤트를 기반으로 청취자가 트리거됩니다.

+7

I * think * 당신이 마침내이 설명과 함께 청취자에게 나를 위해 떨어질 페니를 도왔을 수도 있습니다. 이 페이지는 북마크되고 있습니다 !!! –

+1

'setVariableChangeListener' 메소드를 호출해야 할 때 누군가 설명 할 수 있습니까? 'VariableChangeListener'가 인터페이스이기 때문에 정확히'setVariableChangeListener'에 무엇이 전달됩니까? – AvP

-4

당신은 정확히 원하는 것을 정의하지 않았으므로 다음과 같이 만들 수 있습니다. 작동 할 수도 있습니다. 변수 이름이 v라고 가정하십시오. 하나의 변수 previous_v를 만듭니다. 이전 버전 만들기 = v; .

if(v!=previous_v){ 
//your stuffs 
} 
+3

이것은 한번 확인한 후 다시 확인하지 않기 때문에 단지 작동하지 않습니다. 작성자는 변수가 언제 변경되는지를 알고 싶어합니다. while 루프는 검사를 계속합니다. –

관련 문제