我试图从使用recyclerView.findChildViewUnder(e.getX(), e.getY())
获得的视图中获取view.getId(),但它总是返回-1
以下是相关代码:
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
View view = recyclerView.findChildViewUnder(e.getX(), e.getY());
if (view !=null) {
onClick(view);
}
return super.onSingleTapConfirmed(e);
}
以下是我如何注册gesturelistener:
gestureDetector = new GestureDetectorCompat(getActivity(), new RecyclerViewGestureListener());
我尝试在onClick(View view)
答案 0 :(得分:0)
这里有一些关于问题解决方案的猜测...我希望我做对了。请告诉我我是怎么做的。
如果您想要在{x}布局中定义的事件位置id
获取View
,则很可能具有您实际想要的id的视图是返回视图的父视图,因此以下代码可能是您想要的:
private void onClick(View view) {
// get a reference to the nearest ancestor View
// that has an id.
try {
while (view.getId() == View.NO_ID) {
view = (View) view.getParent();
}
} catch (NullPointerException e) {
return; // no ancestors with an ID found
} catch (ClassCastException e) {
return; // cannot cast parent to View
}
// got the ID of a view
view.getId();
}
如果您想要获得id
ViewHolder
View
的{{1}}位置,findContainingViewHolder()
可能有用。以下代码可能会有所帮助...如果它仍然返回-1,请确保覆盖getItemId()
的自定义实现中的ViewHolder
:
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
View view = recyclerView.findChildViewUnder(e.getX(), e.getY());
if (view !=null) {
RecyclerView.ViewHolder viewHolder = recyclerView.findContainingViewHolder(view);
if (viewHolder != null) {
onClick(viewHolder);
}
}
return super.onSingleTapConfirmed(e);
}
private void onClick(RecyclerView.ViewHolder view) {
// got the ID of the ViewHolder
view.getItemId();
}