ListView
转到RecyclerView
,但我遇到了一个问题:我无法使ImageView
的onClick事件生效。基本上,我想要的是当用户单击图片时,在新的活动中以全屏模式显示该图像。类似这样: 我尝试过以下方法:@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();
//add data to your bundle
bundle.putInt("id", position);
//create intent
Intent mainIntent = new Intent(context, Extra1.class);
//add bundle to intent
mainIntent.putExtras(bundle);
//start activity
context.startActivity(mainIntent);
}
});
}
EDIT
The 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) { }
}
MainRecyclerView
这里是我定义 RecyclerView
和 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);
}
})
);
删除recyclerView.addOnItemTouchListener();
将解决图片长按的问题,但是我将无法启动ViewPager
,我想可能是RecyclerItemClickListener
有问题。
setTag
和getTag
。感谢pskink,我已经更新了我的帖子。 - Raghunandan