* It will change background color/ card image accordingly */ public class VideoContentCardPresenter extends Presenter { private static int sSelectedBackgroundColor; private static int sDefaultBackgroundColor; @Override public ViewHolder onCreateViewHolder(ViewGroup parent) { Context context = parent.getContext(); sDefaultBackgroundColor = ContextCompat.getColor(context, R.color.default_background); sSelectedBackgroundColor = ContextCompat.getColor(context, R.color.selected_background); ImageCardView cardView = new ImageCardView(parent.getContext()) { @Override public void setSelected(boolean selected) { updateCardBackgroundColor(this, selected); super.setSelected(selected); } }; cardView.setFocusable(true); cardView.setFocusableInTouchMode(true); updateCardBackgroundColor(cardView, false); return new ViewHolder(cardView); } private static void updateCardBackgroundColor(ImageCardView view, boolean selected) { int color = selected ? sSelectedBackgroundColor : sDefaultBackgroundColor; // Both background colors should be set because the view's background is temporarily visible // during animations. view.setBackgroundColor(color); view.findViewById(R.id.info_field).setBackgroundColor(color); } @Override public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) { VideoContent clip = (VideoContent) item; if (clip.getCardImageUrl() != null) { ImageCardView cardView = (ImageCardView) viewHolder.view; Resources resources = cardView.getContext().getResources(); cardView.setTitleText(clip.getTitle()); cardView.setContentText(clip.getDescription()); int cardWidth = Math.round(resources.getDimensionPixelSize(R.dimen.card_width) ); int cardHeight = resources.getDimensionPixelSize(R.dimen.card_height); cardView.setMainImageDimensions(cardWidth, cardHeight); Glide.with(viewHolder.view.getContext()) .load(clip.getCardImageUrl()) .into(cardView.getMainImageView()); } } @Override public void onUnbindViewHolder(Presenter.ViewHolder viewHolder) { ImageCardView cardView = (ImageCardView) viewHolder.view; cardView.setBadgeImage(null); cardView.setMainImage(null); } }