是否可能将CursorAdapter设置在RecyclerView中,就像在ListView中一样?

7 浏览
0 Comments

是否可能将CursorAdapter设置在RecyclerView中,就像在ListView中一样?

我到目前为止还没有找到一个能够替代我的项目中的ListView的解决方案,因为我需要使用与SQLite相关联的游标。\n旧的方法如下:\nlistview.setAdapter(cursorAdapter) 这样,我可以获取游标来处理数据库中的数据。\n但是现在,recycleview.setAdapter(recycleview.adapter) 它无法识别扩展了BaseAdapter的适配器。\n所以有人可以帮我吗?

0
0 Comments

问题出现的原因:因为新的RecyclerView使用了新的RecyclerView.Adapter基类,所以无法与CursorAdapter一起工作。目前还没有RecyclerView.Adapter的默认实现可用。

解决方法:可以在GitHub上找到一些解决方案,但官方发布的版本可能在各个方面都更好,最好等待官方发布。

GitHub项目链接:gist.github.com/skyfishjy/443b7448f59be978bc59

0
0 Comments

问题的出现的原因是:用户想要在RecyclerView中使用CursorAdapter,类似于在ListView中使用CursorAdapter,但是没有官方的实现。

解决方法是:用户可以自己实现一个CursorAdapter类,并在其中重写相关方法。具体的实现代码如下:

public class CursorAdapter extends RecyclerView.Adapter {
    Cursor dataCursor;
    public int getItemCount() {
        return (dataCursor == null) ? 0 : dataCursor.getCount();
    }
    public void changeCursor(Cursor cursor) {
        Cursor old = swapCursor(cursor);
        if (old != null) {
            old.close();
        }
    }
    public Cursor swapCursor(Cursor cursor) {
        if (dataCursor == cursor) {
            return null;
        }
        Cursor oldCursor = dataCursor;
        this.dataCursor = cursor;
        if (cursor != null) {
            this.notifyDataSetChanged();
        }
        return oldCursor;
    }
    private Object getItem(int position) {
        dataCursor.moveToPosition(position);
        // Load data from dataCursor and return it...
    }
}

然而,用户发现在自己实现的过程中可能会出现bug或者一些意外情况,所以他们更倾向于等待官方发布一个官方的解决方案。

用户感觉官方可能不会发布官方的解决方案,因为他们一直强调“不要在UI线程上进行数据库操作”的理念,就像在使用CursorLoader时一样。总之,关于解决方案,用户还需要检查由于移动光标或光标状态而引起的潜在错误。到目前为止,我所看到的实现只是在这种情况下抛出异常,这对我来说似乎不太优雅。

用户尝试了这个简单的解决方案,并且成功解决了问题。

如果onBindViewHolder被调用,那么适配器确实有一些数据支持它。也许你从光标中获取数据的方法没有按预期工作?如果你仍然遇到问题,请发布一个单独的问题,我可以帮助你。

谢谢,我解决了问题,问题不在于适配器,而是我在代码中犯了一些愚蠢的错误。

0