2016-12-20 1 views
0

저는 Eventbus를 사용하여 TextView를 업데이트하지만 언젠가는 처음에는 작동하지 않습니다. 두 번째로 변경 한 후에 변경되지만, 어떻게 작동하는지 모르겠습니다. 도와 줘요. 고마워요. 내 코드가 있습니다. 먼저는TextView setText() 가끔 작동하지 않습니다.

@Subscribe(threadMode = ThreadMode.MAIN) 
public void onEvent(Event event) { 
    final Event loca = event; 
    System.out.println("---sta--" + "onEvent"); 
    if (!isVisible || !isLoad) { 
     return; 
    } 
    System.out.println("---sta--" + "visonEvent" + loca.getAddress()+TextUtils.isEmpty(loca.getAddress())); 
    txtLocationDetails.setText(String.format("address:%s", TextUtils.isEmpty(loca.getAddress()) ? "" : loca.getAddress())); 
    offset = 0; 
    initDatas(); 

} 

작동하지 않을 것하지만 그것이 괜찮아 내가 왜 모르는

@Subscribe(threadMode = ThreadMode.MAIN) 
public void onEvent(Event event) { 
    final Event loca = event; 
    System.out.println("---sta--" + "onEvent"); 
    if (!isVisible || !isLoad) { 
     return; 
    } 
    System.out.println("---sta--" + "visonEvent" + loca.getAddress()+TextUtils.isEmpty(loca.getAddress())); 
    txtLocationDetails.post(new Runnable() { 
     @Override 
     public void run() { 
      txtLocationDetails.setText(String.format("address:%s", TextUtils.isEmpty(loca.getAddress()) ? "" : loca.getAddress())); 
     } 
    }); 
    offset = 0; 
    initDatas(); 

} 

작동 아래 난 당신이 말해 줄 수, 코드를 변경? 감사합니다.

+0

읽고 http://stackoverflow.com/questions/13840007/what-exactly-does-the-post-method-do을 –

+0

사용 방송 수신기. – Noorul

+0

관련 스레드 : http://stackoverflow.com/questions/29040333/eventbus-not-on-the-main-thread –

답변

0

스레드를 사용하는 동안 데이터를 직접 업데이트하지 마십시오.

새로운 방법을 만들고 스레드에서 호출하여 TextView에서 데이터를 업데이트하십시오.

당신은 텍스트 뷰의 텍스트 변경하려면이 코드를 시도 할 수 있습니다 :

@Subscribe(threadMode = ThreadMode.MAIN) 
    public void onEventMainThread(MessageEvent event) { 
    textField.setText(event.message); 
} 
+0

당신은 textView를 새로 고치기 위해 새로운 함수를 작성해야하고 이전 함수에서이 함수를 호출해야합니까? – jwmLLL

+0

두 가지 가능성 : 새 함수를 작성하거나 onEventMainThread 메소드를 입력하십시오. –

+0

상단의 첫 번째 코드와 같이 작동하지 않는 경우가 있습니다. – jwmLLL

관련 문제