Last active
January 25, 2018 18:05
-
-
Save samuel22gj/06798f4a5fd74d7eedea14e27feba41b to your computer and use it in GitHub Desktop.
Multiple Type RecyclerView Adapter
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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); | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Try to use this library :) https://github.com/vivchar/RendererRecyclerViewAdapter