是否可能将CursorAdapter设置在RecyclerView中,就像在ListView中一样?
问题出现的原因:因为新的RecyclerView使用了新的RecyclerView.Adapter基类,所以无法与CursorAdapter一起工作。目前还没有RecyclerView.Adapter的默认实现可用。
解决方法:可以在GitHub上找到一些解决方案,但官方发布的版本可能在各个方面都更好,最好等待官方发布。
问题的出现的原因是:用户想要在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被调用,那么适配器确实有一些数据支持它。也许你从光标中获取数据的方法没有按预期工作?如果你仍然遇到问题,请发布一个单独的问题,我可以帮助你。
谢谢,我解决了问题,问题不在于适配器,而是我在代码中犯了一些愚蠢的错误。