2016-12-20 13 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

Пока вы используете поток, не пытайтесь напрямую обновлять данные из него.

Else сделать новый метод и позвонить из потока для обновления данных в TextView.

Вы можете попробовать этот код, чтобы внести изменения в TextView тексте:

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

ваше среднее. Мне нужно написать новую функцию для обновления textView, а затем вызвать эту функцию в старой функции? – jwmLLL

+0

Две возможности: Напишите новую функцию или поместите метод onEventMainThread. –

+0

это не работает, как мой первый код в верхней части – jwmLLL