我試圖做一個簡單的任務,正在運行的任務之後更改視圖可見性,通過調用下面的代碼:片段getActivity()返回null
private void runTask(){
Thread t = new Thread(new Runnable(){
@Override
public void run(){
boolean status = task();
setVisibility(boolean);
}
}).start();
}
public void setVisibility(final boolean status) {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
if (status) {
myView.setVisibility(View.VISIBLE);
} else {
myView.setVisibility(View.GONE);
}
}
});
}
問題是:任務我運行需要root(這工作正常),並在這一刻我的活動失去了重點,所以我的碎片是分離的,我的getActivity()
返回null
。執行根命令後,即使我的活動被帶到前面,但我的片段沒有重視它了,不再附加
而且,我嘗試使用
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
this.activity = activity;
}
我的片段,和而不是調用getActivity().runOnUiThread()
,我打電話activity.runOnUiThread()
,這仍然不起作用(代碼運行良好,它進入if/else語句,但在UI中沒有任何更改,我也嘗試在設置新的可見性後調用invalidate()
)
任何解決方案?
'onAttach'被調用時,片段是**第一**附加到活動。我猜,它不會被調用兩次。另外,試着重新解釋你的問題,你做什麼以及你想達到什麼並不明顯。例如,「root command」是什麼意思?以root用戶身份執行任務?要不然? – Drew
是的,以root用戶身份執行任務。這不是命令運行正常的問題。我試圖根據我的根任務的結果更新我的視圖可見性,它返回一個布爾值,然後在'setVisibility'方法中使用它。 – Wamasa
爲什麼你發佈一個可運行的程序來改變視圖的可見性?你的整個'setVisibility'代碼可以簡化爲'myView.setVisibility(status?View.VISIBLE:View.GONE);'因此你不會遇到你的問題,因爲你不需要一個Activity。它將比創建一個新的Runnable對象並將其發佈到UI線程消息隊列更有效。 – Drew