Skip to content Skip to sidebar Skip to footer

Can I Use Only One Recyclerview For The Three Different Cardview With Different Design?

Can I create only one recycler_view.xml to handle my three set of cardview.xml with different design? Or Do I need to create separate recyclerView for each one of my cardViews. Fo

Solution 1:

Yes you can use getItemViewType()

Depending upon view type inflate different layout for item

Example

publicclassMyAdapterextendsRecyclerView.Adapter<RecyclerView.ViewHolder> {
    classViewHolder0extendsRecyclerView.ViewHolder {
        ...
    }

    classViewHolder2extendsRecyclerView.ViewHolder {
        ...
    }

    @OverridepublicintgetItemViewType(int position) {

        return viewType;
    }

    @Overridepublic RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
         switch (viewType) {
             case0: returnnewViewHolder0(...);
             case2: returnnewViewHolder2(...);
             ...
         }
    }
}

Solution 2:

Yes we can use multiple cardView. For reference see below link Sample Adapter

Here i am showing list of reviews when no reviews i am displaying no reviews availble. Here i am creating 2 ViewHolders one for my review item and another one for no review available item.

code:

package com.subbu.moviemasti.adapter;

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

import com.subbu.moviemasti.R;
import com.subbu.moviemasti.entities.Review;
import com.subbu.moviemasti.fragment.IReviewView;

import java.util.List;

import butterknife.Bind;
import butterknife.ButterKnife;

/**
 * Created by subrahmanyam on 24-12-2015.
 */publicclassReviewAdapterextendsRecyclerView.Adapter<RecyclerView.ViewHolder> {
    privatefinal List<Review> results;

    publicReviewAdapter(IReviewView reviewFragment, List<Review> results) {
        this.results = results;
    }

    @Overridepublic RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        Viewview=null;
        RecyclerView.ViewHolderviewHolder=null;
        switch (viewType) {
            case0:
                view = View.inflate(parent.getContext(), R.layout.list_item_empty_view, null);
                viewHolder = newEmptyViewHolder(view);
                break;
            case1:
                view = View.inflate(parent.getContext(), R.layout.review_list_item, null);
                viewHolder = newViewHolder(view);
                break;
        }
        return viewHolder;
    }

    @OverridepublicvoidonBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        intviewType= getItemViewType(position);
        switch (viewType) {
            case0:
                EmptyViewHolderemptyViewHolder= (EmptyViewHolder) holder;
                emptyViewHolder.emptyView.setText(((EmptyViewHolder) holder).emptyView.getResources().getString(R.string.no_trailers));
                break;
            case1:
                Reviewreview= results.get(position);
                ViewHolderviewHolder= (ViewHolder) holder;
                viewHolder.userName.setText(review.getAuthor());
                viewHolder.review.setText(review.getContent());
                break;
        }
    }

    @OverridepublicintgetItemCount() {
        return results.size() > 0 ? results.size() : 1;
    }

    @OverridepublicintgetItemViewType(int position) {
        return results.size() == 0 ? 0 : 1;
    }

    classViewHolderextendsRecyclerView.ViewHolder {
        @Bind(R.id.review_user)
        TextView userName;
        @Bind(R.id.review_review)
        TextView review;

        publicViewHolder(View itemView) {
            super(itemView);
            ButterKnife.bind(this, itemView);
        }
    }
}

Post a Comment for "Can I Use Only One Recyclerview For The Three Different Cardview With Different Design?"