package com.jakewharton.u2020.ui.trending; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.ViewGroup; import com.jakewharton.u2020.R; import com.jakewharton.u2020.data.api.model.Repository; import com.squareup.picasso.Picasso; import java.util.Collections; import java.util.List; import rx.functions.Action1; final class TrendingAdapter extends RecyclerView.Adapter<TrendingAdapter.ViewHolder> implements Action1<List<Repository>> { public interface RepositoryClickListener { void onRepositoryClick(Repository repository); } private final Picasso picasso; private final RepositoryClickListener repositoryClickListener; private List<Repository> repositories = Collections.emptyList(); public TrendingAdapter(Picasso picasso, RepositoryClickListener repositoryClickListener) { this.picasso = picasso; this.repositoryClickListener = repositoryClickListener; setHasStableIds(true); } @Override public void call(List<Repository> repositories) { this.repositories = repositories; notifyDataSetChanged(); } @Override public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) { TrendingItemView view = (TrendingItemView) LayoutInflater.from(viewGroup.getContext()) .inflate(R.layout.trending_view_repository, viewGroup, false); return new ViewHolder(view); } @Override public void onBindViewHolder(ViewHolder viewHolder, int i) { viewHolder.bindTo(repositories.get(i)); } @Override public long getItemId(int position) { return position; } @Override public int getItemCount() { return repositories.size(); } public final class ViewHolder extends RecyclerView.ViewHolder { public final TrendingItemView itemView; public ViewHolder(TrendingItemView itemView) { super(itemView); this.itemView = itemView; this.itemView.setOnClickListener(v -> { Repository repository = repositories.get(getAdapterPosition()); repositoryClickListener.onRepositoryClick(repository); }); } public void bindTo(Repository repository) { itemView.bindTo(repository, picasso); } } }