Skip to content

Instantly share code, notes, and snippets.

@DevAhamed
Last active May 20, 2019 05:31
Show Gist options
  • Save DevAhamed/3b20a16b9eb8191c7ba17f572f19465b to your computer and use it in GitHub Desktop.
Save DevAhamed/3b20a16b9eb8191c7ba17f572f19465b to your computer and use it in GitHub Desktop.
// ItemBinder for NewsSource
public class NewsSourceBinder extends ItemBinder<NewsSource, NewsSourceBinder.ViewHolder> {
@Override public ViewHolder createViewHolder(ViewGroup parent) {
return new ViewHolder(inflate(parent, R.layout.item_news_source));
}
@Override public void bindViewHolder(ViewHolder holder, NewsSource item) {
holder.imageView.setImageResource(item.getIconResource());
holder.textView.setText(item.getText());
int bgColor = ContextCompat.getColor(holder.textView.getContext(),
holder.isItemSelected() ? item.getColor() : R.color.cardview_light_background);
holder.cardView.setBackgroundColor(bgColor);
holder.cardView.setCardElevation(holder.isItemSelected() ? 16 : 0);
}
@Override public boolean canBindData(Object item) {
return item instanceof NewsSource;
}
public static class ViewHolder extends ItemViewHolder<NewsSource> {
private ImageView imageView;
private TextView textView;
private CardView cardView;
public ViewHolder(View itemView) {
super(itemView);
imageView = itemView.findViewById(R.id.image_view);
cardView = (CardView) itemView;
textView = itemView.findViewById(R.id.text_view);
}
}
}
// ItemBinder for Header
public class HeaderBinder extends ItemBinder<String, HeaderBinder.ViewHolder> {
@Override public ViewHolder createViewHolder(ViewGroup parent) {
return new ViewHolder(inflate(parent, R.layout.item_header));
}
@Override public void bindViewHolder(ViewHolder holder, String item) {
holder.header.setText(item);
}
@Override public boolean canBindData(Object item) {
return item instanceof String;
}
static class ViewHolder extends ItemViewHolder<String> {
private TextView header;
ViewHolder(View itemView) {
super(itemView);
header = itemView.findViewById(R.id.tv_header);
}
}
}
// Create adapter
public void setUpAdapter(List<NewsSource> newsPaperSourcesList, List<NewsSource> newsChannelSourcesList) {
MultiViewAdapter adapter = new MultiViewAdapter();
// Register Binders
adapter.registerBinders(new NewsSourceBinder(), new HeaderBinder());
// NewsPaperSources
ItemSection<String> newsPaperHeader = new ItemSection("News Papers");
ListSection<NewsSource> newsPaperSources = new ListSection();
newsPaperSources.addAll(newsPaperSourcesList);
// NewsChannelSources
ItemSection<String> newsChannelHeader = new ItemSection("News Channels");
ListSection<NewsSource> newsChannelSources = new ListSection();
newsChannelSources.addAll(newsChannelSourcesList);
// Add sections to adapter
adapter.addSection(newsPaperHeader);
adapter.addSection(newsPaperSources);
adapter.addSection(newsChannelHeader);
adapter.addSection(newsChannelSources);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment