2016-08-29 58 views
0

我有一个名为DataNode的类,它将在AsyncTask内实例化。好吧。无法更改Java类中的TextView可见性(android)

但是,如果任务失败,我想显示一个错误,如果成功,则显示一个标题。 所以,里面的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

如果你调用'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()方法。实现你的使用情况的一种方法是通过TextViewDataNode创建时:

class DataNode { 

    final WeakReference<TextView> textViewRef; 

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

然后,使用TextViewonOk()

public void onOk(){ 
    TextView textView = textViewRef.get(); 
    if (textView != null) { 
    textView.setVisibility(View.VISIBLE); 
    } 
}