我使用 SlidingDrawer 作为我的主要布局。在内容区域内,我有一个片段(其中包含一个 ListView) 当活动第一次加载一切都很好时,listview 正确滚动。
当我开始一个不同的活动然后回来时,我尝试的第一个滚动动作被 SlidinDrawer 拦截,然后打开或关闭它。只要您停止滚动并拿起手指,ListView 就可以再次滚动。
我希望 ListView 在活动恢复时能够滚动。并且通常能够控制 SlidingDrawer 是否是获得焦点的那个。
更新:
我已经把问题缩小了一点。我已扩展 SLidingDrawer 以允许使用以下代码单击句柄中的按钮。
Override
public boolean onInterceptTouchEvent(MotionEvent event) {
super.onInterceptTouchEvent(event);
if (mHandleLayout != null) {
int clickX = (int) (event.getX() - mHandleLayout.getLeft());
int clickY = (int) (event.getY() - mHandleLayout.getTop());
if (isAnyClickableChildHit(mHandleLayout, clickX, clickY))
return false;
}
return super.onInterceptTouchEvent(event);
}
private boolean isAnyClickableChildHit(ViewGroup viewGroup, int clickX, int clickY) {
for (int i = 0; i < viewGroup.getChildCount(); i++) {
View childView = viewGroup.getChildAt(i);
if (TAG_CLICK_INTERCEPTED.equals(childView.getTag())) {
childView.getHitRect(mHitRect);
if (mHitRect.contains(clickX, clickY))
return true;
}
if (childView instanceof ViewGroup && isAnyClickableChildHit((ViewGroup) childView, clickX, clickY))
return true;
}
return false;
}
如果我注释掉 onInterceptTouchEvent 函数,一切似乎都正常。