2015-05-01 3 views
2

Я столкнулся с небольшой проблемой недействительности на Android. После создания моего представления о создании Activity я получаю обратный вызов Listener («onSomething» в примере ниже ») для обновления TextView, однако я не могу заставить его работать ... Можете ли вы помочь?Android TextView invalidate не работает

активность OnCreate:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.myLayout); 

    init_views(); 
} 

Мой метод инициализации мнения:

private static TextView myTxtView; 
private void init_views(){ 
    myTxtView = (TextView) findViewById(R.id.txtid); 
} 

Слушатель и TextView обновление:

@Override 
public void onSomething(JSONObject data) { 
    try { 
     ... // my code 

     myTxtView.setText(distance); // this doesn't work :(:(
     myTxtView.postInvalidate(); // this doesn't work :(:(

    } catch (Throwable t){ return; } 
} 
+0

Вы можете проверить, если 'onSomething' на самом деле называется? Должно ли ваше текстовое изображение быть статическим? Вы уверены, что 'distance' не является нулевым? – questioner

+0

Yep onSomething вызывается, и на TextView не влияет статическое или нет ... в обоих случаях не работает. –

ответ

2

setText должен быть вызван в потоке пользовательского интерфейса.

myTxtView.post(new Runnable() { 
    public void run() { 
     myTxtView.setText(distance); 
    } 
}); 
+0

Нельзя применить текст ... «Расстояние» должно быть окончательным. Но я должен манипулировать этой переменной в обратном вызове onSomething. –

+0

Вы можете пометить расстояние как окончательное? 'final String distance = ...;' – Blackbelt

+0

ok нашел его, отметив его как final перед запуском Runnable. Много кода ... Есть ли более чистый код? –

0

вы должны обновить TextView в деятельности вы должны использовать runOnUiThread

runOnUiThread(new Runnable() { 
      @Override 
      public void run() { 

        myTxtView.setText(distance); 

     }); 
Смежные вопросы