Android 洒在碎片里

Android 洒在碎片里,android,android-fragments,android-listfragment,android-cursor,Android,Android Fragments,Android Listfragment,Android Cursor,我有ListFragment(来自支持包),我正在尝试使用带有Spreads库的适配器(CursorList)。一切正常,直到我改变屏幕方向。然后我得到一个例外: java.lang.IllegalStateException:尝试重新打开已关闭的对象:SQLiteQuery:从MyTable中选择* 我的灵感来自github()上的示例应用程序 在示例中,查询在Activity中的onCreate函数中注册,我在ListFragment中的onAttach函数中注册它 @Override pu

我有ListFragment(来自支持包),我正在尝试使用带有Spreads库的适配器(CursorList)。一切正常,直到我改变屏幕方向。然后我得到一个例外:

java.lang.IllegalStateException:尝试重新打开已关闭的对象:SQLiteQuery:从MyTable中选择*

我的灵感来自github()上的示例应用程序

在示例中,查询在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;
            }
        };
private ManyQuery.ResultHandler onCyclassLoaded=
新建ManyQuery.ResultHandler(){
@凌驾
公共布尔handleResult(游标列表结果){
适配器.swapCursorList(结果);
返回true;
}
};
我调试方向更改后发生的情况,并调用两次回调onmycassload(有时甚至更多次),但第一次创建适配器调用onmycassload只调用一次。问题是为什么在方向改变后调用回调函数的次数更多


任何澄清此问题的帮助都将不胜感激

最后我自己发现了这个问题,所以我给出了答案。也许有人会需要它,因为我在Spready的GitHub或Google上找不到关于这件事的任何信息

如果您想在片段内部使用Spreads,那么必须对查询进行一些更改

而不是

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);