我有ListFragment(来自支持包),我正在尝试使用Sprinkles库(CursorList)的适配器。一切正常,直到我改变屏幕方向。然后我得到例外:
java.lang.IllegalStateException:尝试重新打开已经关闭的对象:SQLiteQuery:select * from MyTable
我的灵感来自github(https://github.com/emilsjolander/sprinkles/tree/master/sample)上的示例应用程序。
样本查询在Activity中的onCreate函数中注册,我在ListFragment中的onAttach函数中注册。
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
...
...
adapter = new MyAdapter(getActivity());
Query.many(MyClass.class, "select * from myTable")
.getAsync(getLoaderManager(), onMyClassLoaded, MyClass.class);
}
我的回调与样本一致。
private ManyQuery.ResultHandler<MyClass> onMyClassLoaded =
new ManyQuery.ResultHandler<MyClass>() {
@Override
public boolean handleResult(CursorList<MyClass> result) {
adapter.swapCursorList(result);
return true;
}
};
我调整了方向更改后的内容,并且调用onMyClassLoaded两次调用(有时甚至更多次),但首次创建适配器调用onMyClassLoaded只有一次。问题是为什么在方向改变后调用回调函数的次数。
非常感谢任何澄清此问题的帮助!
答案 0 :(得分:0)
最后我发现了问题,所以我给出了答案。也许有人会需要它,因为我在Sprinkle的GitHub或谷歌上找不到任何关于此事的内容。
如果你想在Fragment中使用Sprinkles,那么你必须改变一点查询。
而不是
Query.many(MyClass.class, "select * from myTable")
.getAsync(getLoaderManager(), onMyClassLoaded, MyClass.class);
从您的活动中使用LoaderManager。
就我而言:
Query.many(MyClass.class, "select * from myTable")
.getAsync(getActivity().getSupportLoaderManager(), onMyClassLoaded, MyClass.class);