SlidingDrawer中的ListView在onResume之后失去焦点

时间:2012-09-06 01:54:52

标签: android listview focus touch slidingdrawer

我使用SlidingDrawer作为我的主要布局。在内容区域内我有一个片段(包含ListView)当活动首次加载时,一切都很棒,列表视图正确滚动。

当我开始一个不同的活动然后回来时,我尝试的第一个滚动动作被SlidindDrawer拦截,并打开或关闭它。只要您停止滚动并拿起手指,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函数,一切似乎都能正常工作。

1 个答案:

答案 0 :(得分:0)

我注意到您正在拨打super.onInterceptTouchEvent(event)两次。为什么? 这可能就是问题的原因。