Heterogenous Recyclerview
Posted By : Ankita Singh | 28-May-2016
Recyclerview can also be used too inflate multiple layouts or view types where you want two or more type of layout or item view.To implement heterogenous layouts in recyclerview you have to override the method
- getItemViewType()
- onCreateViewHolder()
- onBindViewHolder()
I am going to write the adapter for the heterogeneous recyclerview for this you have to extend the Recyclerview.adapter and implement all the three method which i have written above.....here i m going to write a code for inflating the different item at even position and different item at odd position,
public class DefaultCategoryAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
ArrayList<DefaultCategoryPojo> defaultCategoryList;
OnViewClickListener onViewClickListener;
private final int TYPE_ODD = 271;
private final int TYPE_EVEN = 270;
public DefaultCategoryAdapter(ArrayList<DefaultCategoryPojo> defaultCategoryList, OnViewClickListener onViewClickListener) {
this.defaultCategoryList = defaultCategoryList;
this.onViewClickListener = onViewClickListener;
}
@Override
public int getItemViewType(int position) {
if ((position % 2) == 0) {
viewType = TYPE_EVEN;
} else {
viewType = TYPE_ODD;
}
return viewType;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view;
RecyclerView.ViewHolder viewHolder = null;
switch (viewType) {
case TYPE_EVEN:
view = LayoutInflater.from(parent.getContext()).inflate(R.layout.default_category_even_item, parent, false);
viewHolder = new EvenRowHolder(view);
break;
case TYPE_ODD:
view = LayoutInflater.from(parent.getContext()).inflate(R.layout.default_category_odd_item, parent, false);
viewHolder = new OddRowHolder(view);
break;
}
return viewHolder;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
DefaultCategoryPojo defaultCategoryPojo = defaultCategoryList.get(position);
switch (holder.getItemViewType()) {
case TYPE_EVEN:
evenItems(holder, position, defaultCategoryPojo);
break;
case TYPE_ODD:
oddItems(holder, position, defaultCategoryPojo);
break;
default:
break;
}
}
private void evenItems(RecyclerView.ViewHolder holder, final int position, DefaultCategoryPojo defaultCategoryPojo) {
final EvenRowHolder evenRowHolder = (EvenRowHolder) holder;
evenRowHolder.categoryCard.setCardElevation(10);
evenRowHolder.categoryText.setText(defaultCategoryPojo.getCategoryText());
evenRowHolder.categoryImage.setImageDrawable(defaultCategoryPojo.getCategoryImage());
// evenRowHolder.floatingChooser.setBackgroundTintList(ColorStateList.valueOf(Color.RED));
evenRowHolder.floatingChooser.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onViewClickListener.setOnViewClickListner(evenRowHolder.floatingChooser, position);
}
});
}
private void oddItems(RecyclerView.ViewHolder holder, final int position, DefaultCategoryPojo defaultCategoryPojo) {
final OddRowHolder oddRowHolder = (OddRowHolder) holder;
oddRowHolder.categoryCard.setCardElevation(10);
oddRowHolder.categoryText.setText(defaultCategoryPojo.getCategoryText());
oddRowHolder.categoryImage.setImageDrawable(defaultCategoryPojo.getCategoryImage());
// oddRowHolder.floatingChooser.setBackgroundTintList(ColorStateList.valueOf(Color.GREEN));
oddRowHolder.floatingChooser.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onViewClickListener.setOnViewClickListner(oddRowHolder.floatingChooser, position);
}
});
}
@Override
public int getItemCount() {
return defaultCategoryList.size();
}
}
Cookies are important to the proper functioning of a site. To improve your experience, we use cookies to remember log-in details and provide secure log-in, collect statistics to optimize site functionality, and deliver content tailored to your interests. Click Agree and Proceed to accept cookies and go directly to the site or click on View Cookie Settings to see detailed descriptions of the types of cookies and choose whether to accept certain cookies while on the site.
About Author
Ankita Singh
Ankita is an Android Application Developer. She has experience in developing android application by using Java and xml.