无法在Java类中更改TextView可见性(android)

时间:2016-08-29 14:03:54

标签: java android android-asynctask findviewbyid

我有一个名为DataNode的类,它将在AsyncTask内实例化。那好吧。

但是,如果任务失败,我想显示错误,如果成功,我想显示标题。 那么,DataNode内部,我有一个名为onOk()的方法,将由异步调用。

我已经将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 个答案:

答案 0 :(得分:0)

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

}

答案 1 :(得分: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);
  }
}