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