package com.photo.photogallery.search; import android.support.annotation.NonNull; import android.support.v4.app.Fragment; import android.support.v7.widget.CardView; import android.support.v7.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.FrameLayout; import android.widget.ImageView; import com.photo.photogallery.R; import com.photo.photogallery.api.entities.Photo; import com.photo.photogallery.network.AppImageLoader; import com.photo.photogallery.other.Utils; import java.util.List; import static java.util.Collections.emptyList; import static java.util.Collections.unmodifiableList; class SearchAdapter extends RecyclerView.Adapter<SearchAdapter.SearchViewHolder> { @NonNull private final Listener listener; @NonNull private final LayoutInflater layoutInflater; @NonNull private final AppImageLoader imageLoader; @NonNull private SearchFragment searchFragment; @NonNull private RecyclerView recyclerView; private float density; @NonNull private List<Photo> photos = emptyList(); SearchAdapter(@NonNull Fragment fragment, @NonNull LayoutInflater layoutInflater, @NonNull RecyclerView recyclerView, @NonNull AppImageLoader imageLoader) { this.searchFragment = (SearchFragment) fragment; this.listener = (Listener) fragment; this.layoutInflater = layoutInflater; this.recyclerView = recyclerView; this.imageLoader = imageLoader; this.density = searchFragment.getResources().getDisplayMetrics().density; } @Override public int getItemCount() { return photos.size(); } public void setData(@NonNull List<Photo> photos) { this.photos = unmodifiableList(photos); notifyDataSetChanged(); } @Override @NonNull public SearchViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { return new SearchViewHolder(layoutInflater.inflate(R.layout.photo_grid_item, parent, false)); } @Override public void onBindViewHolder(@NonNull SearchViewHolder viewHolder, int position) { viewHolder.bind(photos.get(position)); } public class SearchViewHolder extends RecyclerView.ViewHolder { private final ImageView imageView; private final CardView cardView; SearchViewHolder(@NonNull View itemView) { super(itemView); cardView = (CardView) itemView.findViewById(R.id.card_view_photo); imageView = (ImageView) itemView.findViewById(R.id.grid_photo_image_view); } private void bind(@NonNull Photo photo) { cardView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { listener.OnPhotoSelected(photo); } }); int imageWidth = (int) (recyclerView.getWidth() / density / 1.5); FrameLayout.LayoutParams layoutParams = new FrameLayout.LayoutParams(imageWidth, imageWidth); imageView.setLayoutParams(layoutParams); imageLoader.downloadInto(Utils.getImageUrl(photo, imageWidth), imageView); } } interface Listener { void OnPhotoSelected(@NonNull Photo photo); } }