I just switched from ListViewto RecyclerViewand I had a problem: I cannot get ImageView'sonClickListener to work . Basically, I want to display the image in full screen in a new action when the user clicks on it.
Something like that:

What I tried:
@Override
public PaletteViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.
from(parent.getContext()).
inflate(R.layout.card_view, parent, false);
return new PaletteViewHolder(itemView);
}
@Override
public void onBindViewHolder(PaletteViewHolder holder,final int position) {
Palette palette = palettes.get(position);
holder.text1.setText(palette.getName());
holder.text2.setText(palette.getHexValue());
final Context context = holder.img.getContext();
Picasso.with(context)
.load(DaciaData.DaciaModele[position])
.placeholder(R.drawable.placeholder)
.error(R.drawable.error)
.resizeDimen(R.dimen.list_detail_image_size, R.dimen.list_detail_image_size)
.centerInside()
.tag(context)
.into(holder.img);
holder.img.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Bundle bundle = new Bundle();
bundle.putInt("id", position);
Intent mainIntent = new Intent(context, Extra1.class);
mainIntent.putExtras(bundle);
context.startActivity(mainIntent);
}
});
}
EDIT
RecyclerItemClickListener:
public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener {
private OnItemClickListener mListener;
public interface OnItemClickListener {
void onItemClick(View view, int position);
}
GestureDetector mGestureDetector;
public RecyclerItemClickListener(Context context, OnItemClickListener listener) {
mListener = listener;
mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
@Override public boolean onSingleTapUp(MotionEvent e) {
return true;
}
});
}
@Override
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
}
@Override public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e) {
View childView = view.findChildViewUnder(e.getX(), e.getY());
if (childView != null && mListener != null && mGestureDetector.onTouchEvent(e)) {
mListener.onItemClick(childView, view.getChildPosition(childView));
return true;
}
return false;
}
@Override public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) { }
}
MainRecyclerViewHere I define RecyclerViewalong with onItemTouchListener:
@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.recyclerModels);
LinearLayoutManager linearLM = new LinearLayoutManager(getActivity());
linearLM.setOrientation(LinearLayoutManager.VERTICAL);
recyclerView.setLayoutManager(linearLM);
recyclerView.addOnItemTouchListener(
new RecyclerItemClickListener(getActivity(), new RecyclerItemClickListener.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
Bundle bundle = new Bundle();
bundle.putInt("id", position);
Intent i = new Intent(getActivity(), MainViewPager.class);
i.putExtras(bundle);
startActivity(i);
}
})
);
Deleting recyclerView.addOnItemTouchListener();will solve the problem with a long click on the image, but I can’t start it ViewPager, I think something is wrong with RecyclerItemClickListener.