5

私はメインレイアウトとして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関数をコメントアウトすると、すべてが正常に機能しているように見えます。

4

1 に答える 1

0

私はあなたが二度電話していることに気づきましたsuper.onInterceptTouchEvent(event)。なんで?それが問題の理由かもしれません。

于 2012-09-13T15:17:57.363 に答える