【问题标题】:ListView in SlidingDrawer loses focus after onResumeSlidingDrawer 中的 ListView 在 onResume 后失去焦点
【发布时间】:2023-03-09 15:03:01
【问题描述】:

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

【问题讨论】:

    标签: android listview focus touch slidingdrawer


    【解决方案1】:

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

    【讨论】:

    • 嗯,是的,这就是问题的原因。但是,在第一行调用它的原因是即使在拖动可点击按钮时也能启用拖动操作。我已经通过在活动恢复后为几个事件禁用第一个 super.onInterceptTouchEvent 来缓解这个问题。
    猜你喜欢
    • 2011-01-04
    • 1970-01-01
    • 1970-01-01
    • 2013-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-21
    相关资源
    最近更新 更多