Android SlidingDrawer中的ListView在恢复后失去焦点

Android SlidingDrawer中的ListView在恢复后失去焦点,android,listview,focus,touch,slidingdrawer,Android,Listview,Focus,Touch,Slidingdrawer,我使用一个滑动抽屉作为我的主要布局。在内容区域内,我有一个片段(其中包含一个ListView),当活动第一次加载所有内容时,ListView会正确滚动 当我启动一个不同的活动,然后返回时,我尝试的第一个滚动运动被SlidendDrawer截获,并打开或关闭它。一旦停止滚动并拿起手指,ListView就可以再次滚动 我希望ListView能够在活动恢复时滚动。而且通常能够控制滑动抽屉是否是焦点所在 更新: 我把问题缩小了一点。我已经扩展了滑动抽屉,允许用下面的代码点击把手上的按钮 Override

我使用一个滑动抽屉作为我的主要布局。在内容区域内,我有一个片段(其中包含一个ListView),当活动第一次加载所有内容时,ListView会正确滚动

当我启动一个不同的活动,然后返回时,我尝试的第一个滚动运动被SlidendDrawer截获,并打开或关闭它。一旦停止滚动并拿起手指,ListView就可以再次滚动

我希望ListView能够在活动恢复时滚动。而且通常能够控制滑动抽屉是否是焦点所在

更新:

我把问题缩小了一点。我已经扩展了滑动抽屉,允许用下面的代码点击把手上的按钮

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(MotionEvent){
super.onInterceptTouchEvent(事件);
if(mHandleLayout!=null){
int clickX=(int)(event.getX()-mHandleLayout.getLeft());
int clickY=(int)(event.getY()-mHandleLayout.getTop());
如果(isAnyClickableChildHit(mHandleLayout,clickX,clickY))
返回false;
}
返回super.onInterceptTouchEvent(事件);
}
私有布尔值isAnyClickableChildHit(视图组视图组、int-clickX、int-clickY){
对于(int i=0;i

如果我注释掉onInterceptTouchEvent函数,一切似乎都正常工作。

我注意到您调用了
super.onInterceptTouchEvent(事件)
两次。为什么?
这可能就是问题的原因。

是的,这就是问题的原因。但是,在第一行中调用它的原因是,即使在拖动可单击按钮时,也要启用拖动操作。我已通过在活动恢复后为几个事件禁用第一个super.onInterceptTouchEvent来缓解此问题。