Android Loader不会触发屏幕上的callback

我正在使用一个AsyncTaskLoader 。 我有一个已经实现LoaderCallbacks (支持库)的活动。

我有断点debugging,并放入日志,加载器提供结果,但第二次onLoadFinishedcallback没有触发。 奇怪的是,当我再次旋转时,它会起作用,当我回到起始位置时,从哪个方向开始callback。

在我的活动onResume

 LoaderManager lm = getSupportLoaderManager(); Loader loader = lm.initLoader(0, null, new LoaderManager.LoaderCallbacks<String>() { @Override public Loader<String> onCreateLoader(int i, Bundle bundle) { Loader<String> loader = new TestLoader(MainActivity.this); return loader; } @Override public void onLoadFinished(Loader<String> stringLoader, String s) { Log.d(Application.TAG, "OnLoadFinished " + s); doStuff(s); } @Override public void onLoaderReset(Loader<String> stringLoader) { // NOP } }); 

在我的装载机中:

 public class TestLoader extends AsyncTaskLoader<String> { private String mData; public TestLoader(Context context) { super(context); } // This get's called after a loader is initialized or a loader // that is alive still is reset @Override public void onStartLoading() { if (mData != null) { // Have our data loaded, just deliver it! deliverResult(mData); } if (takeContentChanged() || mData == null) { forceLoad(); } } // This is called when an Activity or Fragment requests a loader // to be reset because they want new data @Override public void onReset() { mData = null; // Ensure that the old task is cancelled if it was running // We do NOT have to call forceLoad here because onStartLoading // will get called after this cancelLoad(); } // Here we just want to store our own data we got and reset our boolean @Override public void deliverResult(String data) { Log.d(Application.TAG, "deliverResult " + data); mData = data; super.deliverResult(mData); } @Override public String loadInBackground() { // returns content from a content provider ... } } 

真的很困惑这个,我是新来的Android,所以也许这是显而易见的其他人:)

Solutions Collecting From Web of "Android Loader不会触发屏幕上的callback"

如果它是一个Activity或者onActivityCreated()如果是一个Fragment你至less要简单地调用onCreate() getSupportLoaderManager() / getLoaderManager() 。 实际的initLoader()可以在其他地方。 否则,加载器将处于停止状态,即使完成加载,也不会传递结果。 我怀疑这是因为加载器pipe理器不会将旧的加载器重新附加到新的Activity除非上述调用是在新的ActivityonCreate()

你有

 Loader loader = lm.initLoader(...) 

你应该有

 Loader loader = new LoaderManager.LoaderCallbacks(...) {...} 

并在你的onResume()

 this.getLoaderManager().restartLoader(0, null, this.loader); 

请参阅装载机文档 。