我有一个RecyclerView,它产生一个包含另一个RecyclerView的CardView。需要处理RecyclerView上的点击事件的建议
父RecyclerView适配器设置子RecyclerView适配器为了呈现下面的图像。 (红色文本中添加,以显示其位置):
我的问题是如何获取的东西被点击,如母公司0和儿童0与第一个孩子RecyclerView是表示第一父RecyclerView位置点击?
我有一个RecyclerView,它产生一个包含另一个RecyclerView的CardView。需要处理RecyclerView上的点击事件的建议
父RecyclerView适配器设置子RecyclerView适配器为了呈现下面的图像。 (红色文本中添加,以显示其位置):
我的问题是如何获取的东西被点击,如母公司0和儿童0与第一个孩子RecyclerView是表示第一父RecyclerView位置点击?
ViewHolder item is your list item so implement on click listener on it
and you can get clicked position on item click as:
class ViewHolder extends RecyclerView.ViewHolder implements
View.OnClickListener {
ViewHolder(View itemView) {
super(itemView);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View view) {
System.out.println("clicked position "+getAdapterPosition());
}
创建自定义RecyclerView监听
public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener {
private OnItemClickListener mListener;
public interface OnItemClickListener {
public 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 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.getChildAdapterPosition(childView));
}
return false;
}
@Override
public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) {
}
@Override
public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {
}
}
然后在活动执行上面的类
recyclerview.addOnItemTouchListener(new RecyclerItemClickListener(getActivity(), new RecyclerItemClickListener.OnItemClickListener() {
@Override
public void onItemClick(View view1, int position) {
CardView item_card = (CardView) view1.findViewById(R.id.item_card);
item_card.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view2) {
//you code here
}
});
}
}));
谢谢你的回答。我已经跟随它,并有一个问题,我如何访问item_card里面的RecyclerView的位置编号? – John
谢谢您的回答。你将如何获得父级RecyclerView adapater职位?我已将相同的概念应用于父ViewHolder,并且它不会被调用。 – John
你设置了点击监听器吗?如果是,那么你的问题不清楚。 – Malika