使用自定义CursorAdapter和LoaderManger初始化为null游标

时间:2013-04-16 00:22:50

标签: android android-cursoradapter android-loadermanager

我创建了一个自定义的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并忽略我不需要的所有其他参数?

谢谢!

2 个答案:

答案 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
        .
        .
        .
    }
}