machinezhou
machinezhou

Reputation: 689

Is it possible to make CursorAdapter be set in recycleview, just like ListView?

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?

Upvotes: 18

Views: 10601

Answers (2)

Gabriele Mariotti
Gabriele Mariotti

Reputation: 364371

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.

Upvotes: 7

Nyx
Nyx

Reputation: 2243

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

}

Upvotes: 31

Related Questions