2016-10-20 3 views
-1

I 사용자 현존 변경 청취자를 사용한 android.I에서 헤로인과의 Openfire를 사용하여 안드로이드 응용 프로그램을 만드는 오전 .. 의 방법을 변경캔트 업데이트 UI는 .. 다음은 내 코드는 헤로인 안드로이드

toolbar_status=(TextView)findViewById(R.id.toolbar_status) ; 
    roster.addRosterListener(new RosterListener() { 
       @Override 
       public void entriesAdded(Collection<String> addresses) { 

       } 

       @Override 
       public void entriesUpdated(Collection<String> addresses) { 

       } 

       @Override 
       public void entriesDeleted(Collection<String> addresses) { 

       } 

       @Override 
       public void presenceChanged(Presence presence) { 
        Log.wtf("CRA","Presence changes---------------"); 
        Log.wtf("CRA","new presence is : "+presence.getFrom()+" "+presence.isAvailable()); 
        toolbar_status.setText(setStatus(presence.isAvailable())); 
       } 
      }); 

내가 볼 수 있듯이 현재 값으로 toolbar_status라는 이름의 textview를 업데이트 중입니다 ... 문제가있는 presenceChanged 함수가 호출되고 로그도 표시되지만 현재 값은 런타임에 업데이트되지 않습니다.이 값은 텍스트로 설정됩니다 활동을 다시 열 때보기. 즉, 내부에서 presentChanged 함수가 실행되는 동안 UI와 상호 작용할 수 없습니다. 나는 초보자 android.Please 제발 어디서 내가 그것을 정렬 할 수있는 내가 잘못 어떻게 도와주세요 ..

답변

1

presenceChanged() (내가 잘 모르겠지만, 스맥에 익숙하지 않은)에서 전화를 받고있을 수 있습니다.

그렇다면 거기에서 UI를 터치 할 수 없습니다.

당신은 다음 작업을 수행 할 수 있습니다 : (UI를 업데이트 할 수있는 곳에서) 주 스레드의 메시지 큐에이 Runnable를 게시 할 예정입니다

runOnUiThread(new Runnable() { 
    @Override 
    public void run() { 
     toolbar_status.setText(setStatus(presence.isAvailable())); 
    } 
}); 

.