2012-09-06 1 views
5

SlidingDrawer를 기본 레이아웃으로 사용합니다. 컨텐트 영역 안에는 조각 (ListView 포함)이 있습니다. 먼저 액티비티가 모두로드되면 목록 뷰가 제대로 스크롤됩니다.SlidingDrawer의 ListView가 onResume 이후 포커스를 잃습니다

다른 활동을 시작한 다음 다시 돌아올 때 내가 시도한 첫 번째 스크롤 동작은 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 함수를 주석 처리하면 모든 것이 정상적으로 작동하는 것 같습니다.

답변

0

나는 super.onInterceptTouchEvent(event)을 두 번 호출하는 것으로 나타났습니다. 왜? 그게 문제의 원인 일 수 있습니다.

+0

그래, 문제의 원인입니다. 그러나 첫 번째 줄에서 호출되는 이유는 클릭 가능한 단추를 끌 때도 끌기 동작을 사용 가능하게 설정하기 위해서입니다. 활동을 다시 시작한 후 몇 개의 이벤트에 대해 첫 번째 super.onInterceptTouchEvent를 비활성화하여 문제를 완화했습니다. – Leo