私はSlidingDrawerをメインレイアウトとして使用します。コンテンツエリア内には、(ListViewを含む)フラグメントがあります。アクティビティが最初にすべてロードされると、リストビューが正しくスクロールされます。SlidingDrawerのListViewはonResumeの後にフォーカスを失います
私は別のアクティビティを開始してから戻ってきますが、私が試した最初のスクロール動作はSlidindDrawerによって傍受され、その動作を開始または終了します。スクロールを停止して指を拾うとすぐに、ListViewは再びスクロールすることができます。
アクティビティの再開時にListViewをスクロールできるようにしたいと思います。 SlidingDrawerがフォーカスを取得しているかどうかを制御できます。
UPDATE:
私は少しダウンの問題を縮小しています。次のコードでハンドル内のボタンをクリックできるように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関数をコメントアウトすると、すべて正常に動作しているようです。
これは問題の原因です。しかし、最初の行で呼び出されるのは、クリック可能なボタンがドラッグされているときでも、ドラッグ操作を有効にするためです。アクティビティが再開した後、最初のsuper.onInterceptTouchEventを2つのイベントに対して無効にすることで、この問題を緩和しました。 – Leo