调用initLoader()后Loader不启动?

我有一个片段,并想单击button时启动加载器:

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."; } } 

点击button后,我可以看到我调用的onCreateLoader方法被调用,但创build的加载器从来没有真正开始。 我们是否需要在loader上调用forceLoad()才能真正启动? 没有一个样本职位这样做,

谢谢

Solutions Collecting From Web of "调用initLoader()后Loader不启动?"

你需要实现onStartLoading()并在方法的某个地方调用forceLoad()

看到这个职位的更多信息: 实施装载机(第3部分)

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

你可能会发现这个前面的问题的答案有帮助: Android蜂窝中的加载器

有关装载机的三个重点是:

  1. 始终在初始化forceLoad()使用forceLoad()方法。 例如:

     getLoaderManager().initLoader(500, null, mMyCallback).forceLoad(); 
  2. 始终实现onStartLoading() 。 当相关的片段/活动正在启动时,这个函数将被LoaderManager自动调用。

  3. 确保加载器的ID是唯一的,否则新的加载器将不会被调用。

如果仍有问题,可以通过调用isStarted()方法来检查loader的状态。

您需要保留对在onCreateLoader方法中创build的加载器实例的引用。 然后,刷新它,调用yourLoader.onContentChanged();

如果您在同一活动中有多个加载器,请确保它们的ID不同。 我失去了几个小时弄清楚:)