我尝试执行一项简单的任务,即通过调用以下代码在运行任务后更改视图可见性:
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(这样可以正常工作),此时我的Activity失去了焦点,因此我的片段被释放,我的getActivity()
返回null
。即使在执行了root命令之后,我的Activity也被放到了前面,但我的片段并没有附加到它上面而且不再被连接
另外,我尝试使用
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
this.activity = activity;
}
在我的片段上,而不是调用getActivity().runOnUiThread()
,我打电话给activity.runOnUiThread()
,这仍然无法正常工作(代码运行正常,它进入if / else语句,但没有任何变化在UI中。我也尝试在设置新的可见性后调用invalidate()
任何解决方案?
答案 0 :(得分:1)
一些可能性:
View.post()
,就像使用Activity.runOnUiThread()
一样。