package uk.ivanc.archimvvm; import android.databinding.DataBindingUtil; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.ViewGroup; import java.util.Collections; import java.util.List; import uk.ivanc.archimvvm.databinding.ItemRepoBinding; import uk.ivanc.archimvvm.model.Repository; import uk.ivanc.archimvvm.viewmodel.ItemRepoViewModel; public class RepositoryAdapter extends RecyclerView.Adapter<RepositoryAdapter.RepositoryViewHolder> { private List<Repository> repositories; public RepositoryAdapter() { this.repositories = Collections.emptyList(); } public RepositoryAdapter(List<Repository> repositories) { this.repositories = repositories; } public void setRepositories(List<Repository> repositories) { this.repositories = repositories; } @Override public RepositoryViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { ItemRepoBinding binding = DataBindingUtil.inflate( LayoutInflater.from(parent.getContext()), R.layout.item_repo, parent, false); return new RepositoryViewHolder(binding); } @Override public void onBindViewHolder(RepositoryViewHolder holder, int position) { holder.bindRepository(repositories.get(position)); } @Override public int getItemCount() { return repositories.size(); } public static class RepositoryViewHolder extends RecyclerView.ViewHolder { final ItemRepoBinding binding; public RepositoryViewHolder(ItemRepoBinding binding) { super(binding.cardView); this.binding = binding; } void bindRepository(Repository repository) { if (binding.getViewModel() == null) { binding.setViewModel(new ItemRepoViewModel(itemView.getContext(), repository)); } else { binding.getViewModel().setRepository(repository); } } } }