2012-09-06 11 views
5

私は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関数をコメントアウトすると、すべて正常に動作しているようです。

答えて

0

私はあなたがsuper.onInterceptTouchEvent(event)を2度呼んでいることに気付きました。どうして? これは問題の原因になる可能性があります。

+0

これは問題の原因です。しかし、最初の行で呼び出されるのは、クリック可能なボタンがドラッグされているときでも、ドラッグ操作を有効にするためです。アクティビティが再開した後、最初のsuper.onInterceptTouchEventを2つのイベントに対して無効にすることで、この問題を緩和しました。 – Leo

関連する問題