2016-12-20 94 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中的數據。

你可以試試這個代碼,以使在TextView的文本變化:

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

你的意思我需要編寫一個新的函數來刷新textView,然後在舊函數中調用這個函數? – jwmLLL

+0

兩種可能性:編寫一個新的函數或把onEventMainThread方法。 –

+0

有時候我的第一個代碼在頂部不起作用 – jwmLLL