2014-10-11 77 views
18

我到目前为止没有谷歌解决方案,以取代我的项目中的列表视图,因为我需要使用与sqlite链接的游标。是否有可能使CursorAdapter在recycleview中设置,就像ListView一样?

为遵循旧的方式: listview.setAdapter(cursorAdapter)这样,我可以让光标来处理数据,数据库

但现在,recycleview.setAdapter(recycleview.adapter)它不承认延伸BaseAdapter

所以任何人都可以将适配器帮帮我?

+1

见我的答案在这里: http://stackoverflow.com/a/27732748/1371730 尼斯把戏:)的 – nbtk 2015-01-01 17:01:25

+0

可能的复制[在数据库中使用recyclerview](http://stackoverflow.com/questions/26517855/using-the-recyclerview-with-a-database) – e4c5 2015-10-15 06:27:58

回答

7

新的RecyclerView与新的RecyclerView.Adapter基类一起使用。 所以它不适用于CursorAdapter

目前有没有默认实现RecyclerView.Adapter可用。

可能随着官方发布,Google会添加它。

+1

是的,我在github中找到了一个解决方案,但官方发布会更好在各方面,我最好等一等。 – machinezhou 2014-10-14 03:34:14

+1

@machinezhou你可以分享github项目吗? – josedlujan 2015-11-15 04:18:45

+0

@josedlujan这里是github项目的链接https://gist.github.com/skyfishjy/443b7448f59be978bc59 – 2015-11-24 14:27:54

31

自己做起来其实很简单:

public class CursorAdapter extends RecyclerView.Adapter<ViewHolder>{ 

    Cursor dataCursor; 

    @Override 
    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... 
     } 

} 
+1

呃,这不是我的好朋友,我的确在github上发现了一个项目,其中cursorAdapter是由开发人员自己实现的。但这并不容易,我不确定它是否会出现一个错误或意外的事情。所以由于我自己的能力和稳定性问题,我宁愿等待正式发布。 – machinezhou 2014-10-31 04:25:18

+2

@machinezhou我不认为他们会为它增加一个正式版本,到目前为止这对我来说一直是完美的工作 – nyx 2015-01-12 12:13:03

+0

我感觉得到的是,由于“不”数据库在UI线程上工作“,自从CursorLoader以来他们一直在推动这些工作。 无论如何,就这里的解决方案而言,继续我见过的其他实现,您可能需要检查移动光标或光标状态导致的潜在错误。到目前为止,我所见过的实现只是在这种情况下抛出异常,这对我来说似乎不太合适。 – Tarkenfire 2015-01-21 12:50:07

相关问题