我创建了一个自定义的CursorAdapter,用于我的listview,并实现了LoaderManager.LoaderCallbacks函数来加载数据。
我的问题:在我的活动的onCreate()方法中,我想创建一个CursorAdapter的实例并将其设置为我的listview的适配器。但是,由于LoaderManger尚未运行我的查询并返回游标,我没有光标传递到我的适配器的构造函数中。如果我传入null,我会得到一个空指针异常。
使用simpleCursorAdapter,如果尚未初始化,则可以传递空游标。但是我扩展了CursorAdapter并且它的行为方式不同。
我的问题:有没有办法将空游标传递给我的适配器?当我的构造函数调用我的适配器的super(context,cursor)方法时,我得到了异常。我在构造函数中没有做任何其他事情。
如果我延迟创建我的适配器(并因此将其设置为listview的适配器),直到来自LoaderManger的onLoadFinished()调用,一切正常,但我认为这不是最好的方法。< / p>
我也看到了这个链接:
http://rajeevranganathan.blogspot.com/2012/07/creating-custom-cursor-adapter-and.html
他每次重新创建整个CursorAdapter,实质上是交换listview的适配器,而不仅仅是它的光标 - 这看起来效率很低:你不必重新创建你的适配器,只需交换游标。
非常感谢任何帮助。我是否只需要扩展SimpleCursorAdapter并忽略我不需要的所有其他参数?
谢谢!
答案 0 :(得分:0)
在没有适配器的情况下离开ListView并不是一件坏事。如果你真的想给你的SimpleCursorAdapter一个空光标,我想你可以创建一个没有行的MatrixCursor。
查看Android开发页面上的Loaders Guide。
答案 1 :(得分:0)
如果你使用带有 autoRequery 参数的CursorAdaptor构造函数并传递false,那么传递一个空游标就可以了:
class MyCursorAdapter extends CursorAdapter {
MyCursorAdapter(Context context) {
super(context, null, false); // cursor=null, autoRequery=false
.
.
.
}
}