2016-12-20 5 views
0

Ich benutze Eventbus, um TextView zu aktualisieren, aber ist nicht arbeiten irgendwann zuerst, nachdem ich mit der Sekunde es funktioniert, aber ich weiß nicht, wie es funktioniert. rufen Sie mir helfen? Vielen Dank. Unten ist mein Code. es zuerst nicht funktioniertTextView setText() funktioniert manchmal nicht

@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(); 

} 

aber ich den Code ändern, darunter

arbeiten
@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(); 

} 

ich weiß nicht, warum es in Ordnung ist, können Sie mir sagen? Danke.

+0

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

+0

Verwenden Rundfunkempfänger dafür. – Noorul

+0

Verwandte Themen: http://StackOverflow.com/Questions/29040333/EventBus-Not-on-the-Main-Thread –

Antwort

0

Während Sie Thread verwenden, versuchen Sie nicht, Daten direkt von ihm zu aktualisieren.

Sonst machen Sie eine neue Methode und rufen Sie von Thread, um Daten in TextView zu aktualisieren.

können Sie diesen Code versuchen, Änderungen in Textview Text zu machen:

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

Ihr Mittelwert Ich muss eine neue Funktion schreiben, um die TextView zu aktualisieren, rufen Sie dann diese Funktion in alter Funktion? – jwmLLL

+0

Zwei Möglichkeiten: Schreiben Sie eine neue Funktion oder fügen Sie die Methode EventMainThread ein. –

+0

es funktioniert nicht wie mein erster Code in der Spitze – jwmLLL

Verwandte Themen