2011-11-21 4 views
1

하나의 Java 클래스에서 Activity로 이벤트를 보내려고합니다.다른 클래스의 활동에 이벤트를 보내는 방법은 무엇입니까?

시나리오는 자바 코드에있는 콜백 함수를 호출하여 네이티브에서 일부 데이터를 갖게됩니다.이 클래스는 처리 한 후에 UI를 업데이트해야합니다. Activity 핸들러의 한 위치에서 UI를 업데이트하려고합니다. (어디서나 runOnUiThread()를 사용하고 싶지 않습니다.)

아래의 방법으로 이벤트를 제대로 보낼 수 없습니다.
첫 번째 접근 방식 :
1) 메시지를 대기열에 게시하고 이러한 함수를 호출하는 함수를 정의하십시오.
2) 위에서 언급 한 함수를 (포인트 1) 호출하려면 컨텍스트가 필요합니다. 컨텍스트 유지 및 반환을위한 정적 변수를 유지하면 활동이 두 번 생성되면 첫 번째 활동에 대한 쓰기 컨텍스트를 얻을 수 없습니다 .

public class Activity1 { 
    protected static Context myContext = null; 
    protected Handler myHandler = null; 

    @override 
    public void onCreate() { 
     myContext = this; 
     myHandler = new Handler(); 
    } 

    public static Context getMyContext() { 
     return myContext; 
    } 

    public void postEvent1() { 
     myHandler.sendMessage(); 
    } 
} 

2 접근법 :
1) 정적 변수로 핸들러를 결정 및 고정 기능의 도움이 복귀. - 내부 변수를 노출시키는 좋은 디자인이 아닙니다.
2) 단점은 두 번째 활동이 생성 될 때와 같습니다.

public class Activity1 { 
    protected static Handler myHandler = null; 

    @override 
    public void onCreate() { 
     myHandler = new Handler(); 
    } 

    public static Context getMyHandler() { 
     return myHandler; 
    } 
} 

정적 변수 및 정적 함수를 사용하지 않고 활동 컨텍스트를 가져올 수 있습니까?

아는 사람이라면 지식을 공유하십시오. :)

감사 & 감사합니다,
SSuman185

+0

나를 교정하십시오. 내가 틀렸다면. 귀하의 활동은 "활동"수업을 연장해야합니까? –

+0

Context와 Handler 객체를 생성자의 액티비티에서 클래스로 전달할 수없는 이유는 무엇입니까? – Maep

+0

@Mohan - 예 활동을 연장해야합니다. – Suman

답변

0

나는 키와 컨텍스트를 저장하는 컨테이너 클래스의 HashMap을 사용했다.

클래스 이름을 키로 사용했습니다.

두 번째 활동이 hashmap이 포함 된 클래스에 등록하려고하면 이미 저장된 활동의 컨텍스트로 응답합니다 (그렇지 않은 경우 null).

이렇게하면 두 번째 클래스를 만드는 경우 클래스의 컨텍스트를 저장하고 첫 번째 활동 컨텍스트를 잃어 버리지 않도록 할 수 있습니다.

더 나은 해결책이 있으면 추가하십시오.

관련 문제