加载程序在调用 initLoader() 后不启动?

我有一个片段,想要在单击按钮时启动加载程序:

public class MyFragment extends Fragment {

    public void onActivityCreated() {
        super.onActivityCreated();

        Button btn = ...;
        btn.setOnClickListener(new OnClickListener() {
            public void onClick(View view) {
                getLoaderManager().initLoader(500, null, mMyCallback);
            }
        });
    }  

    private LoaderManager.LoaderCallbacks<String> mMyCallback = new  LoaderManager.LoaderCallbacks<String>() {

        @Override
        public Loader<String> onCreateLoader(int arg0, Bundle arg1) {
            Log.e(TAG, "LoaderCallback.onCreateLoader().");
            return new MyLoader(getActivity());
        }
    }
}

public class MyLoader extends AsyncTaskLoader<String> {
    public MyLoader(Context context) {
        super(context);
    }

    @Override
    public String loadInBackground() {
        Log.e(TAG, "Hi, running.");
        return "terrific.";
    }
}

单击按钮后,我可以看到调用的回调的onCreateLoader方法被调用,但创建的加载程序从未实际启动过。我们是否需要在加载程序本身上调用 forceLoad() 才能让它真正启动?没有一个示例帖子这样做,

谢谢


答案 1

您需要在方法中的某个位置实现和调用。onStartLoading()forceLoad()

有关更多信息,请参阅此帖子:实现加载程序(第 3 部分)


答案 2

根据我的经验,除非我使用.c,否则它永远不会起作用。forceLoad()

您可能会发现上一个问题的答案很有帮助:Android Honeycomb中的加载程序


推荐