2012-06-26 7 views
1

이라고 불릴 때 나는이 주제를 google에 시도하는 것을 고투하고있다. 올바른 검색어를 사용해서는 안됩니다. 안드로이드에 위치 청취자가 있는데, 보통 내가 사용하는 클래스 안에 청취자를 중첩시킵니다.알아 듣는 사람의 방법이

public class ClassName { 
    ... 
    private class Listener implements SomeListener{ 
     ... 
     public void somethingChanged(){ 
      ... 
     } 
    } 
} 

이번에는 청취자에게 코드를 읽기 쉽게하기위한 새로운 클래스를 만들기로 결정 했으므로 재사용 할 수 있습니다. 이제는 리스너와 리스너를 사용하는 클래스가 분리되어 있습니다.

public class ClassName{ 
    ... 
} 

public class Listener implements SomeListener{ 
    ... 
    public void somethingChanged(){ 
     ... 
    } 
} 

는 그래서 somethingChanged() 방법 안에, 난 그냥 이벤트가 그래서 몇 가지 업데이트를 할 수있는 발생 내 주요 클래스를 통지합니다. 나는 이것을 할 수있는 방법을 생각할 수 없다. 청취자의 방법에 특정한 것을 넣을 수 없거나 재사용 할 수 없습니다. 리스너에서 호출 된 메소드를 리스너를 사용하여 클래스의 메소드를 호출하는 방법은 무엇입니까?

+1

Google for observer pattern. – Tudor

+0

그런가요, 튜더? 아니면 항상 청중을 중첩해야합니까? – Ryan

+0

관찰자 패턴은 엔터티가 구현을 단단히 연결하지 않고 다른 엔터티에 변경 사항을 알리도록하려는 경우 일반적인 패턴입니다. – Tudor

답변

2

음, 내부 클래스는 외부 클래스를 알고 있습니다. 외부 클래스는 더 이상 클래스를 분리하지 않았기 때문에 더 이상 볼 수 없습니다.

나는 생성자에 ListenerClassName의 인스턴스를 전달하고 somethingChanged 내에서 ClassName의 공개 메소드를 호출 건의 할 것입니다.

+0

그러면 다른 클래스와 함께 리스너를 재사용 할 수 없습니다. 또는 당신이 말한 것을 할 수는 있지만, 리스너를 사용하고자하는 클래스가 이벤트가 발생하면 리스너가 호출하는 단일 메소드를 구현하도록하십시오. 이것은 내가 인식하지 못하거나 연결하지 않는 공통점이있는 것처럼 들립니다. 나는 그것을 연구 할 것이다. – Ryan

+1

@ l3v : 그런 다음 이벤트가 발생할 때 호출 할 메소드가있는 인터페이스를 도입하십시오. 클래스가이 인터페이스를 구현할 수 있고이를 리스너에게 전달할 수 있습니다. – buc

+0

@ l3v : ... 아니면 리스너를 제네릭 클래스로 만들 수 있습니다. 어떤 메소드가 호출되어야 하는지를 알아야하지만, => 인터페이스는 더 좋은 아이디어이다. – Vlad

관련 문제