片段getActivity()返回null

时间:2014-04-30 20:01:50

标签: android android-fragments android-lifecycle

我尝试执行一项简单的任务,即通过调用以下代码在运行任务后更改视图可见性:

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()

任何解决方案?

1 个答案:

答案 0 :(得分:1)

一些可能性:

  1. 存储标志的状态。如果附加了活动,请更改它,否则将其存储。在onResume方法中设置可见性。
  2. 您可以使用View.post(),就像使用Activity.runOnUiThread()一样。