5

我使用 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 函数,一切似乎都正常。

4

1 回答 1

0

我注意到你打super.onInterceptTouchEvent(event)了两次电话。为什么?这可能是问题的原因。

于 2012-09-13T15:17:57.363 回答