如何在使用支持RecyclerView

时间:2016-11-19 20:28:06

标签: java android sqlite cursor android-recyclerview

这个问题是关于管理SQLiteDatabase的小更改的有效和适当的方法。出于讨论目的,我们可以查看this code,我已在此总结:

CursorRecyclerViewAdapter.java

public abstract class CursorRecyclerViewAdapter<VH extends RecyclerView.ViewHolder> extends RecyclerView.Adapter<VH> {
    public CursorRecyclerViewAdapter(Context context, Cursor cursor) {
    public Cursor getCursor() {
    public int getItemCount() {
    @Override public long getItemId(int position) {
    @Override public void setHasStableIds(boolean hasStableIds) {
    public abstract void onBindViewHolder(VH viewHolder, Cursor cursor);
    @Override public void onBindViewHolder(VH viewHolder, int position) {
    public void changeCursor(Cursor cursor) {
    public Cursor swapCursor(Cursor newCursor) {
    private class NotifyingDataSetObserver extends DataSetObserver {
        @Override public void onChanged() {
        @Override public void onInvalidated() {

MyListCursorAdapter.java

public class MyListCursorAdapter extends CursorRecyclerViewAdapter<MyListCursorAdapter.ViewHolder>{
    public MyListCursorAdapter(Context context,Cursor cursor){
    public static class ViewHolder extends RecyclerView.ViewHolder {
        public ViewHolder(View view) {
    @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    @Override public void onBindViewHolder(ViewHolder viewHolder, Cursor cursor) {

方案如下:应用程序的用户采取一些操作,需要在数据库中的某个记录上翻转一下。在该操作的侦听器中,可以轻松更改数据库中的一条记录,并确保视图随更改一起更新。但我的光标不再同步。我解决的问题&#34;问题是重新查询数据库并交换生成的新游标。但这似乎是用锤子杀死一只苍蝇。我希望通过RecyclerView.notifyDataSetChanged()方法获得一些魔法,但它没有做任何事情。

因此,如果Cursor加载了数据并进行了少量更改,那么再次运行查询,获取新的Cursor并交换它,还是有更好的方法是否有效且合适?

1 个答案:

答案 0 :(得分:0)

虽然再次运行完整查询的想法似乎效率低下,但this example on github可用于检查重新查询大量记录的影响。在主列表活动的onCreate()中,您可以在repository.insertSome(n);中添加大量数字。对于1000条记录等,将n设置为40左右

现在,当用户对其中一条记录(长按)执行操作时,将更新数据库,模型和视图,并通过重新查询创建新光标。虽然数据库中有很多记录,但查询似乎没有使用太多资源(即它似乎响应很快)。