2012-09-06 36 views
5

Tôi sử dụng SlidingDrawer làm bố cục chính của mình. Bên trong khu vực nội dung tôi có một Fragment (có chứa một ListView) Khi hoạt động đầu tiên tải mọi thứ là tuyệt vời, listview cuộn một cách chính xác.ListView trong SlidingDrawer mất tiêu điểm sau onResume

Khi tôi bắt đầu một hoạt động khác và sau đó quay trở lại, chuyển động cuộn đầu tiên mà tôi thử được chặn bởi SlidindDrawer và mở hoặc đóng nó. Ngay khi bạn ngừng cuộn và nhấc ngón tay lên, ListView lại có thể cuộn.

Tôi muốn ListView có thể cuộn khi hoạt động tiếp tục. Và nói chung có thể kiểm soát xem SlidingDrawer có phải là người tập trung hay không.

UPDATE:

tôi đã thu hẹp vấn đề xuống một chút. Tôi đã mở rộng SLidingDrawer để cho phép nhấp vào các nút trong tay cầm với đoạn mã sau.

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; 
} 

Nếu tôi nhận xét chức năng onInterceptTouchEvent, mọi thứ có vẻ hoạt động bình thường.

Trả lời

0

Tôi nhận thấy rằng bạn đang gọi super.onInterceptTouchEvent(event) hai lần. Tại sao? Đó có thể là lý do cho vấn đề này.

+0

Vâng vâng đó là nguyên nhân gây ra sự cố. Tuy nhiên, lý do nó được gọi trong dòng đầu tiên là cho phép kéo hành động ngay cả khi các nút có thể nhấp được đang được kéo lên. Tôi đã giảm nhẹ vấn đề bằng cách vô hiệu hóa super.onInterceptTouchEvent đầu tiên cho một vài sự kiện sau khi hoạt động đã tiếp tục. – Leo

Các vấn đề liên quan