18

I'm using the recycleview to show a list. I was wondering how do we show different types of views? As in, different ViewHolders int the same adapter

In the simple listview we used getItemViewType(), anything different in the recycleview?

kame
  • 20,848
  • 33
  • 104
  • 159
Arthur
  • 3,636
  • 5
  • 19
  • 25
  • Possible duplicate of [How to create RecyclerView with multiple view type?](http://stackoverflow.com/questions/26245139/how-to-create-recyclerview-with-multiple-view-type) – Ashok Varma Mar 03 '16 at 01:04

2 Answers2

38

To create RecyclerView with multiple view type just implement getItemViewType(), two different ViewHolders and take care of the viewType parameter in onCreateViewHolder() and bindViewHolder().

Short example:

public class MultipleViewTypesAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

    private static final int VIEW_TYPE_FIRST  = 0;
    private static final int VIEW_TYPE_SECOND = 1;

    class ViewHolderFirst extends RecyclerView.ViewHolder {
        ...
    }

    class ViewHolderSecond extends RecyclerView.ViewHolder {
        ...
    }

    @Override
    int getItemViewType(int position) {
        return position % 2;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        switch (viewType) {
            case VIEW_TYPE_FIRST: return new ViewHolderFirst(...);
            case VIEW_TYPE_SECOND: return new ViewHolderSecond(...);
            ...
        }
    }

    @Override
    public void bindViewHolder(RecyclerView.ViewHolder holder, int position) {
        switch (getItemViewType(position)) {
            case VIEW_TYPE_FIRST:
                ViewHolderFirst viewHolderFirst = (ViewHolderFirst)holder;
                ...
                break;
            case VIEW_TYPE_SECOND:
                ViewHolderSecond viewHolderSecond = (ViewHolderSecond)holder;
                ...
                break;
            ...
        }
    }
}
erakitin
  • 11,437
  • 5
  • 44
  • 49
  • What would you return for default case in onCreaeViewHolder? – Gokhan Arik Oct 29 '15 at 20:42
  • @GokhanArik you choose. I think the best choice is to return the empty adapter, as the list used to populate adapter might be empty. – joninx Mar 15 '16 at 12:45
  • Google suggest you display an Image or helpful text, when there is no content to display. Follow the [material design spec](https://material.google.com/patterns/empty-states.html#) on empty states for more details. – Chad Mx Nov 27 '16 at 01:12
-2

compile 'com.firebaseui:firebase-ui-database:1.0.1' compile 'com.firebaseui:firebase-ui-storage:1.0.1' put that in gradle