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?"