package com.navigation.sharedelement; import androidx.core.view.ViewCompat; import androidx.recyclerview.widget.RecyclerView; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.navigation.R; /** * Adapts Views containing kittens to RecyclerView cells * * @author bherbst */ public class KittenGridAdapter extends RecyclerView.Adapter<KittenViewHolder> { private final int mSize; private final KittenClickListener mListener; /** * Constructor * @param size The number of kittens to show * @param listener A listener for kitten click events */ public KittenGridAdapter(int size, KittenClickListener listener) { mSize = size; mListener = listener; } @Override public KittenViewHolder onCreateViewHolder(ViewGroup container, int position) { LayoutInflater inflater = LayoutInflater.from(container.getContext()); View cell = inflater.inflate(R.layout.item_grid, container, false); return new KittenViewHolder(cell); } @Override public void onBindViewHolder(final KittenViewHolder viewHolder, final int position) { switch (position % 6) { case 0: viewHolder.image.setImageResource(R.drawable.placekitten_1); break; case 1: viewHolder.image.setImageResource(R.drawable.placekitten_2); break; case 2: viewHolder.image.setImageResource(R.drawable.placekitten_3); break; case 3: viewHolder.image.setImageResource(R.drawable.placekitten_4); break; case 4: viewHolder.image.setImageResource(R.drawable.placekitten_5); break; case 5: viewHolder.image.setImageResource(R.drawable.placekitten_6); break; } // It is important that each shared element in the source screen has a unique transition name. // For example, we can't just give all the images in our grid the transition name "kittenImage" // because then we would have conflicting transition names. // By appending "_image" to the position, we can support having multiple shared elements in each // grid cell in the future. ViewCompat.setTransitionName(viewHolder.image, String.valueOf(position) + "_image"); viewHolder.image.setOnClickListener(v -> mListener.onKittenClicked(viewHolder, position)); } @Override public int getItemCount() { return mSize; } }