2016-08-29 56 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); 
    } 
}