Skip to content

Instantly share code, notes, and snippets.

@frogermcs
Created June 12, 2016 19:09
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save frogermcs/c4954681c0803523f781e7b80e192e3b to your computer and use it in GitHub Desktop.
Save frogermcs/c4954681c0803523f781e7b80e192e3b to your computer and use it in GitHub Desktop.
ViewHolder and Dagger 2 example
public class RepositoriesListAdapter extends RecyclerView.Adapter {
private RepositoriesListActivity repositoriesListActivity;
private final List<Repository> repositories = new ArrayList<>();
public RepositoriesListAdapter(RepositoriesListActivity repositoriesListActivity) {
this.repositoriesListActivity = repositoriesListActivity;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
final RecyclerView.ViewHolder viewHolder;
if (viewType == Repository.TYPE_NORMAL) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_normal, parent, false);
viewHolder = new RepositoryViewHolderNormal(view);
} else if (viewType == Repository.TYPE_BIG) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_big, parent, false);
viewHolder = new RepositoryViewHolderBig(view);
} else if (viewType == Repository.TYPE_FEATURED) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_featured, parent, false);
viewHolder = new RepositoryViewHolderFeatured(view);
} else {
return null;
}
viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onRepositoryItemClicked(viewHolder.getAdapterPosition());
}
});
return viewHolder;
}
private void onRepositoryItemClicked(int adapterPosition) {
repositoriesListActivity.onRepositoryClick(repositories.get(adapterPosition));
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
((RepositoryViewHolder) holder).bind(repositories.get(position));
}
@Override
public int getItemCount() {
return repositories.size();
}
@Override
public int getItemViewType(int position) {
Repository repository = repositories.get(position);
if (repository.stargazers_count > 500) {
if (repository.forks_count > 100) {
return Repository.TYPE_FEATURED;
}
return Repository.TYPE_BIG;
}
return Repository.TYPE_NORMAL;
}
public void updateRepositoriesList(List<Repository> repositories) {
this.repositories.clear();
this.repositories.addAll(repositories);
notifyDataSetChanged();
}
public static class RepositoryViewHolderNormal extends RepositoryViewHolder {
@Bind(R.id.tvName)
TextView tvName;
public RepositoryViewHolderNormal(View view) {
super(view);
ButterKnife.bind(this, itemView);
}
@Override
public void bind(Repository repository) {
tvName.setText(repository.name);
}
}
public static class RepositoryViewHolderBig extends RepositoryViewHolder {
@Bind(R.id.tvName)
TextView tvName;
@Bind(R.id.tvStars)
TextView tvStars;
@Bind(R.id.tvForks)
TextView tvForks;
public RepositoryViewHolderBig(View view) {
super(view);
ButterKnife.bind(this, itemView);
}
@Override
public void bind(Repository repository) {
tvName.setText(repository.name);
tvStars.setText("Stars: " + repository.stargazers_count);
tvForks.setText("Forks: " + repository.forks_count);
}
}
public static class RepositoryViewHolderFeatured extends RepositoryViewHolder {
@Bind(R.id.tvName)
TextView tvName;
@Bind(R.id.tvStars)
TextView tvStars;
@Bind(R.id.tvForks)
TextView tvForks;
public RepositoryViewHolderFeatured(View view) {
super(view);
ButterKnife.bind(this, itemView);
}
@Override
public void bind(Repository repository) {
tvName.setText(repository.name);
tvStars.setText("Stars: " + repository.stargazers_count);
tvForks.setText("Forks: " + repository.forks_count);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment