2016-08-29 3 views
0

У меня есть класс с именем DataNode, который будет создан внутри AsyncTask. Хорошо, тогда.Невозможно изменить видимость TextView внутри класса Java (android)

Но я хочу показать ошибку, если задача не удалась, или заголовок, если он будет успешным. Итак, внутри DataNode класс У меня есть метод под названием onOk(), который будет вызываться Async.

У меня уже есть заголовок/ошибки, созданные в файле стилей XML как невидимые, и просто хочу показать им.

Я пытаюсь сделать (в названии примера):

public void onOk(){ 
    TextView view = (TextView) findViewById(R.id.lblRealTime); 
    view.setVisibility(View.VISIBLE); 
} 

Но я получаю сообщение об ошибке: Error:(29, 36) error: cannot find symbol method findViewById(int)

Я уже прочитал еще темы, но никто не ответил на мою проблему.

+2

, если вы звоните в этот метод 'doInBackground' возможно, вам следует использовать метод 'runOnUiThread', потому что' doInBackground' не входит в основной поток, поэтому вы не можете вызвать 'findViewById'. –

ответ

0
public void onOk(){ 
    runOnUiThread(new Runnable() { 
      public void run() { 
       TextView view = (TextView) findViewById(R.id.lblRealTime); 
       view.setVisibility(View.VISIBLE); 
      } 
    }); 

} 
0

Ваш DataNode не является ни Activity, ни Fragment, так что не удивительно, что не имеет findViewById() метод определен. Один из способов реализовать случай использования является передать TextView к DataNode при его создании:

class DataNode { 

    final WeakReference<TextView> textViewRef; 

    DataNode(TextView textView) { 
    this.textViewRef = new WeakReference<>(textView); 
    } 
} 

затем используйте TextView в onOk():

public void onOk(){ 
    TextView textView = textViewRef.get(); 
    if (textView != null) { 
    textView.setVisibility(View.VISIBLE); 
    } 
} 
Смежные вопросы