有时在调用initLoader后不要进行onCreateLoader回调

cas*_*ps1 11 android callback loader orientation

我有一个活动,它在创建时调用initLoader,以便加载活动将显示的数据.通常,这很好.我设置断点以查看一切发生的顺序.首先我调用initLoader,然后我得到OnCreateLoader回调,然后是OnLoadFinished回调,然后一切都很棒.

但是,我注意到如果我在Android上更改了方向,我没有获得OnCreateLoader回调或OnLoadFinished回调,导致页面上没有显示数据.我仍然在initLoader调用上获得断点,所以我知道这种情况正在发生,但我没有收到错误,我找不到任何文档解释为什么在调用initLoader后我不会得到回调.

有趣的是,如果我回到原来的方向,我确实得到了回调.

所以,总结一下:

我以纵向开始活动

  • 我叫initLoader
  • 我得到了onCreateLoader和onLoadFinished回调

然后我转向风景

  • 我叫initLoader
  • 没有onCreateLoader或onLoadFinished回调

我改回肖像

  • 我叫initLoader
  • 我得到了onCreateLoader和onLoadFinished回调

同样,如果我以横向模式启动活动,我会收到回调.然后,如果我切换到肖像,我不会.然后,如果我切换回横向,我会再次收到回调.

有谁知道发生了什么事?

jsm*_*ith 10

我们在ViewPager中看到了与Fragments相同的问题.当片段恢复时,似乎没有正确地激活加载器.事实上,当片段暂停时,我们的CursorLoader不再像我期望的那样获得ContentObserver回调.

我们的解决方法是调用restartLoader()来转储先前的内容并重新加载数据.这将与destroyLoader()具有相同的净影响; initLoader(),但效率会更高.

  • 我喜欢你!!我几个小时以来一直在抨击这个问题,你为我节省了很多精力. (2认同)

gno*_*lva 4

您需要在 onCreate 中调用 initLoader

对于类似的问题和更多信息,请查看LoaderCallbacks.onLoadFinished 如果在 AsyncTaskLoader 运行期间发生方向更改,则不会调用