1

我创建了一个自定义 CursorAdapter 与我的列表视图一起使用,并实现了 LoaderManager.LoaderCallbacks 函数来加载数据。

我的问题:在我的活动的 onCreate() 方法中,我想创建我的 CursorAdapter 的一个实例并将其设置为我的列表视图的适配器。但是,由于 LoaderManger 还没有运行我的查询并返回了一个游标,所以我没有游标可以传递给我的适配器的构造函数。如果我传入 null 我会得到一个空指针异常。

使用 simpleCursorAdapter,如果尚未初始化,您可以传递一个空游标。但是我扩展了 CursorAdapter 并且它的行为方式不同。

我的问题:有没有办法将空光标传递给我的适配器?当我的构造函数调用我的适配器的 super(context, cursor) 方法时,我得到了异常。我没有在构造函数中做任何其他事情。

如果我延迟创建我的适配器(并因此将其设置为列表视图的适配器),直到从 LoaderManger 调用 onLoadFinished(),一切正常,但我认为这不是最好的方法。

我还看到了这个链接:

http://rajeevranganathan.blogspot.com/2012/07/creating-custom-cursor-adapter-and.html

他每次都重新创建整个 CursorAdapter,本质上是换掉列表视图的适配器,而不仅仅是它的光标——这似乎相当低效:您不必重新创建适配器,只需换掉光标即可。

任何帮助将不胜感激。我是否只需要扩展 SimpleCursorAdapter 并忽略所有我不需要的附加参数?

谢谢!

4

2 回答 2

0

在没有适配器的情况下离开 ListView 并不是一件坏事。如果你真的想给你的 SimpleCursorAdapter 一个空光标,我想你可以创建一个没有行的 MatrixCursor。

查看Android 开发页面上的加载器指南。

于 2013-04-16T00:44:54.440 回答
0

如果使用带有autoRequery参数的 CursorAdaptor 构造函数并传递 false,则传递空游标是可以的:

class MyCursorAdapter extends CursorAdapter {

    MyCursorAdapter(Context context) {
        super(context, null, false);    // cursor=null, autoRequery=false
        .
        .
        .
    }
}
于 2013-09-01T03:25:34.563 回答