Created
June 12, 2016 19:09
-
-
Save frogermcs/c4954681c0803523f781e7b80e192e3b to your computer and use it in GitHub Desktop.
ViewHolder and Dagger 2 example
This file contains 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 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