Skip to content

Instantly share code, notes, and snippets.

@quanturium
Created April 19, 2015 22:00
Show Gist options
  • Save quanturium/c8aa0599a3f984036525 to your computer and use it in GitHub Desktop.
Save quanturium/c8aa0599a3f984036525 to your computer and use it in GitHub Desktop.

Revisions

  1. quanturium revised this gist Apr 19, 2015. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion SimpleCursorRecyclerAdapter.java
    Original file line number Diff line number Diff line change
    @@ -1,7 +1,7 @@
    /*
    * The MIT License (MIT)
    *
    * Copyright (c) 2014 ARNAUD FRUGIER
    * Copyright (c) 2015 ARNAUD FRUGIER
    *
    * Permission is hereby granted, free of charge, to any person obtaining a copy
    * of this software and associated documentation files (the "Software"), to deal
  2. quanturium created this gist Apr 19, 2015.
    105 changes: 105 additions & 0 deletions SimpleCursorRecyclerAdapter.java
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,105 @@
    /*
    * The MIT License (MIT)
    *
    * Copyright (c) 2014 ARNAUD FRUGIER
    *
    * Permission is hereby granted, free of charge, to any person obtaining a copy
    * of this software and associated documentation files (the "Software"), to deal
    * in the Software without restriction, including without limitation the rights
    * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    * copies of the Software, and to permit persons to whom the Software is
    * furnished to do so, subject to the following conditions:
    *
    * The above copyright notice and this permission notice shall be included in all
    * copies or substantial portions of the Software.
    *
    * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
    * SOFTWARE.
    */

    import android.database.Cursor;
    import android.support.v7.widget.RecyclerView;
    import android.view.LayoutInflater;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.TextView;

    public class SimpleCursorRecyclerAdapter extends CursorRecyclerAdapter<SimpleViewHolder> {

    private int mLayout;
    private int[] mFrom;
    private int[] mTo;
    private String[] mOriginalFrom;

    public SimpleCursorRecyclerAdapter (int layout, Cursor c, String[] from, int[] to) {
    super(c);
    mLayout = layout;
    mTo = to;
    mOriginalFrom = from;
    findColumns(c, from);
    }

    @Override
    public SimpleViewHolder onCreateViewHolder (ViewGroup parent, int viewType) {
    View v = LayoutInflater.from(parent.getContext())
    .inflate(mLayout, parent, false);
    return new SimpleViewHolder(v, mTo);
    }

    @Override
    public void onBindViewHolder (SimpleViewHolder holder, Cursor cursor) {
    final int count = mTo.length;
    final int[] from = mFrom;

    for (int i = 0; i < count; i++) {
    holder.views[i].setText(cursor.getString(from[i]));
    }
    }

    /**
    * Create a map from an array of strings to an array of column-id integers in cursor c.
    * If c is null, the array will be discarded.
    *
    * @param c the cursor to find the columns from
    * @param from the Strings naming the columns of interest
    */
    private void findColumns(Cursor c, String[] from) {
    if (c != null) {
    int i;
    int count = from.length;
    if (mFrom == null || mFrom.length != count) {
    mFrom = new int[count];
    }
    for (i = 0; i < count; i++) {
    mFrom[i] = c.getColumnIndexOrThrow(from[i]);
    }
    } else {
    mFrom = null;
    }
    }

    @Override
    public Cursor swapCursor(Cursor c) {
    findColumns(c, mOriginalFrom);
    return super.swapCursor(c);
    }
    }

    class SimpleViewHolder extends RecyclerView.ViewHolder
    {
    public TextView[] views;

    public SimpleViewHolder (View itemView, int[] to)
    {
    super(itemView);
    views = new TextView[to.length];
    for(int i = 0 ; i < to.length ; i++) {
    views[i] = (TextView) itemView.findViewById(to[i]);
    }
    }
    }