我想根据对本地数据库的异步请求的结果来管理屏幕上的片段。
E.g:
1.转到数据库
2.获得结果
3.交付结果后,选择应向用户显示的片段
(如下面的代码中所示)。
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getLoaderManager().restartLoader(0, null, new LoaderManager.LoaderCallbacks<Boolean>() {
@Override
public Loader<Boolean> onCreateLoader(int id, Bundle args) {
return new MyLoader(MainActivity.this);
}
@Override
public void onLoadFinished(Loader<Boolean> loader, Boolean data) {
FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
if (data) {
fragmentTransaction.add(new MyFragment1(), null);
} else {
fragmentTransaction.add(new MyFragment2(), null);
}
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
@Override
public void onLoaderReset(Loader<Boolean> loader) {
}
});
}
private static class MyLoader extends AsyncTaskLoader<Boolean> {
public MyLoader(Context context) {
super(context);
}
@Override
public Boolean loadInBackground() {
try {
Thread.sleep(1000); //Let's pretend we are looking for something in local db
} catch (InterruptedException e) {
e.printStackTrace();
}
return (System.currentTimeMillis() % 2) == 0; // return true or false randomly
}
}
}
结果,我得到:
java.lang.IllegalStateException:无法在onLoadFinished中执行此操作
我可以欺骗原因系统并将片段事务包装到runnable中并在处理程序上调用它,但似乎我仍然会得到一个例外,即saveInstanceState()调用和onStop之间将传递加载器结果( )。 我无法使用&#34; commitAllowingStateLoss&#34;方法,因为我依赖我的片段的有效堆栈,我不希望它被弄乱。
有人可以建议如何以正确的方式做到这一点吗?