Is it possible to make CursorAdapter be set in rec

2019-03-09 20:29发布

问题:

I didn't google out a solution till now to replace listview in my project, because I need to use the cursor linked with the sqlite.

Old way as followed: listview.setAdapter(cursorAdapter) in this way, I can get the cursor to deal with data in database

but now, recycleview.setAdapter(recycleview.adapter) it doesn't recognize the adapter extending BaseAdapter

so anyone can give me a hand?

回答1:

The new RecyclerView works with a new RecyclerView.Adapter base class. So it doesn't work with the CursorAdapter.

Currently there is no default implementation of RecyclerView.Adapter available.

May be with the official release, Google will add it.



回答2:

Implementing it yourself is actually quite simple:

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

}