如何从newInstance函数中的线程更新我的片段?

时间:2014-09-08 03:02:46

标签: java android multithreading android-fragments android-broadcast

在我的newInstance中我要创建一个线程,然后将文件从外部存储器复制到内部存储器并对其进行处理。之后,我想通知我的片段更新。我怎么能这样做?

首先:没有context所以我无法在broadcast内拨打thread

第二:由于尚未调用getActivity is null方法,因此尚无活动onCreate,因此runOnUiThread不起作用。

public class PageFragment extends Fragment {

    public static PageFragment newInstance(int pageNumber){

            Bundle args = new Bundle();
            args.putInt(EXTRA_PAGENUMBER, pageNumber);
            PageFragment fragment = new PageFragment();
            fragment.setArguments(args);

            new Thread(new Runnable() {

                @Override
                public void run() {
                // call fragment to update
            }).start();

            return fragment;
    }
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    }
}

2 个答案:

答案 0 :(得分:1)

我希望在调用片段时你必须要调用这个

PageFragment fragment = PageFragment.newInstance(pageNumber);

只需将其更改为

即可
PageFragment fragment = PageFragment.newInstance(pageNumber, YourActivity.this);

在PageFragment中,您将获得活动的参考资料

public class PageFragment extends Fragment {

    public static PageFragment newInstance(int pageNumber, Context ctx){

            Bundle args = new Bundle();
            args.putInt(EXTRA_PAGENUMBER, pageNumber);
            PageFragment fragment = new PageFragment();
            fragment.setArguments(args);

            final Context context = ctx;

            new Thread(new Runnable() {

                @Override
                public void run() {
                // use ctx here
            }).start();

            return fragment;
    }
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    }
}

答案 1 :(得分:0)

如果Activity回调中的onAttached(),您需要获取该实例。在调用onResume()的{​​{1}}之前,请不要启动后台线程。在此之前,您的片段未处于运行状态。