根据 onLoadFinished() 方法的 Android 文档:
请注意,通常不允许应用程序在此调用中提交片段事务,因为它可能在保存活动状态后发生。有关这方面的进一步讨论,请参阅 FragmentManager.openTransaction()。
https://developer.android.com/reference/android/app/LoaderManager.LoaderCallbacks.html#onLoadFinished(android.content.Loader, D)
(注意:将该链接复制/粘贴到您的浏览器中...... StackOverflow 处理得不好......)
因此,您根本不应该加载处于该状态的片段。如果你真的不想把Loader放到Fragment里面,那么你需要在你的Activity的onCreate()方法中初始化Fragment,然后当onLoadFinished发生时,简单的在你的Fragment上调用一个方法。
一些粗略的伪代码如下:
public class DummyFragment {
public void setData(Object someObject) {
//do stuff
}
public class DummyActivity extends LoaderCallbacks<Object> {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Fragment newFragment = DummyFragment.newInstance();
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.simple_fragment, newFragment).commit();
getSupportLoaderManager.initLoader(0, null, this)
}
// put your other LoaderCallbacks here... onCreateLoader() and onLoaderReset()
public void onLoadFinished(Loader<Object> loader, Object result) {
Fragment f = getSupportLoaderManager.findFragmentById(R.id.simple_fragment);
f.setData(result);
}
显然,您需要使用正确的对象.. 和正确的加载器,并且可能定义一个有用的 setData() 方法来更新您的片段。但希望这将为您指明正确的方向。