Skip to content

Instantly share code, notes, and snippets.

@samuel22gj
Last active January 25, 2018 18:05
Show Gist options
  • Select an option

  • Save samuel22gj/06798f4a5fd74d7eedea14e27feba41b to your computer and use it in GitHub Desktop.

Select an option

Save samuel22gj/06798f4a5fd74d7eedea14e27feba41b to your computer and use it in GitHub Desktop.
Multiple Type RecyclerView Adapter
public class MultiTypeRecyclerAdapter extends RecyclerView.Adapter<MultiTypeRecyclerAdapter.ViewHolder> {
private static final String TAG = MultiTypeRecyclerAdapter.class.getSimpleName();
@Retention(SOURCE)
@IntDef({VIEW_TYPE_SUBTITLE, VIEW_TYPE_PROMOTION})
public @interface VIEW_TYPE {}
private static final int VIEW_TYPE_SUBTITLE = 0;
private static final int VIEW_TYPE_PROMOTION = 1;
private List<Item> mList;
private OnItemClickListener mListener;
public MultiTypeRecyclerAdapter(List<Item> list) {
mList = list;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, @VIEW_TYPE int viewType) {
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
View itemView;
ViewHolder viewHolder = null;
switch (viewType) {
case VIEW_TYPE_SUBTITLE:
itemView = inflater.inflate(R.layout.fragment_item, parent, false);
viewHolder = new SubtitleViewHolder(itemView);
break;
case VIEW_TYPE_PROMOTION:
itemView = inflater.inflate(R.layout.fragment_item, parent, false);
viewHolder = new PromotionViewHolder(itemView);
break;
default:
break;
}
if (viewHolder != null) {
viewHolder.setOnItemClickListener(mListener);
}
return viewHolder;
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
Item item = mList.get(position);
holder.bind(item);
}
@Override
public int getItemCount() {
return mList != null ? mList.size() : 0;
}
@Override
@VIEW_TYPE
public int getItemViewType(int position) {
return mList.get(position).getViewType();
}
public void setOnItemClickListener(OnItemClickListener listener) {
mListener = listener;
}
///////////////////////////////////////////////////////////////////////////
// ViewHolder
///////////////////////////////////////////////////////////////////////////
public static abstract class ViewHolder extends RecyclerView.ViewHolder {
public View view;
public TextView id;
public TextView content;
public OnItemClickListener listener;
public ViewHolder(View itemView) {
super(itemView);
view = itemView;
id = ViewUtils.findViewById(view, R.id.id);
content = ViewUtils.findViewById(view, R.id.content);
}
public void setOnItemClickListener(OnItemClickListener listener) {
this.listener = listener;
}
public abstract void bind(Item item);
}
public static class SubtitleViewHolder extends ViewHolder {
public SubtitleViewHolder(View itemView) {
super(itemView);
}
@Override
public void bind(Item item) {
final SubtitleItem subtitleItem = (SubtitleItem) item;
id.setText(subtitleItem.id);
content.setText(subtitleItem.content);
view.setBackgroundColor(Color.RED);
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (listener != null) {
listener.onSubtitleClick(view, subtitleItem);
}
}
});
}
}
public static class PromotionViewHolder extends ViewHolder {
public PromotionViewHolder(View itemView) {
super(itemView);
}
@Override
public void bind(Item item) {
final PromotionItem promotionItem = (PromotionItem) item;
id.setText(promotionItem.id);
content.setText(promotionItem.content);
view.setBackgroundColor(Color.BLUE);
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (listener != null) {
listener.onPromotionClick(view, promotionItem);
}
}
});
}
}
///////////////////////////////////////////////////////////////////////////
// Item
///////////////////////////////////////////////////////////////////////////
public static abstract class Item {
public String id;
public String content;
@VIEW_TYPE public abstract int getViewType();
}
public static class SubtitleItem extends Item {
public SubtitleItem(String id, String content) {
this.id = id;
this.content = content;
}
@Override
public int getViewType() {
return VIEW_TYPE_SUBTITLE;
}
}
public static class PromotionItem extends Item {
public PromotionItem(String id, String content) {
this.id = id;
this.content = content;
}
@Override
public int getViewType() {
return VIEW_TYPE_PROMOTION;
}
}
///////////////////////////////////////////////////////////////////////////
// Listener Interface
///////////////////////////////////////////////////////////////////////////
public interface OnItemClickListener {
void onSubtitleClick(View v, SubtitleItem subtitleItem);
void onPromotionClick(View v, PromotionItem promotionItem);
}
}
@vivchar

vivchar commented Jan 25, 2018

Copy link
Copy Markdown

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment