2012-09-06 19 views
5

Ana düzende bir SlidingDrawer kullanıyorum. İçerik alanının içinde bir Fragman (ListView içeren) var. Etkinlik ilk önce her şey harika olduğunda liste görünümü doğru bir şekilde kaydırılıyor.SlidingDrawer'daki ListView öğesi, onResResume sonrasında odağı kaybediyor

Farklı bir etkinlik başlatıp geri geldiğimde, çalıştığım ilk kaydırma hareketi SlidindDrawer tarafından durdurulur ve açılır veya kapatılır. Kaydırma işlemini durdurup parmağınızı alır almaz ListView tekrar kaydırma yapabilir.

ListView'in aktivite devam ettiğinde kaydırma yapabilmesini istiyorum. Ve genellikle sadece SlidingDrawer'ın odaklanıp odaklanmadığını kontrol edebiliyorlar.

GÜNCELLEME:

Ben biraz aşağı sorunu daraltmıştır. SLidingDrawer'ı, aşağıdaki kodla birlikte tutamağındaki düğmelerin tıklatılmasına izin vermek için genişlettim.

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 işlevini açıklarsam, her şey normal çalışıyor gibi görünüyor.

cevap

0

super.onInterceptTouchEvent(event)'u iki kez aradığınızı farkettim. Niye ya? Bu, sorunun nedeni olabilir.

+0

Evet, sorunun nedeni budur. Bununla birlikte, ilk satırda çağrılmasının nedeni, tıklanabilir düğmeler sürüklendiğinde bile sürükleme eylemini etkinleştirmektir. Etkinliğin yeniden başlatılmasından sonra ilk birkaç etkinlik için ilk super.onInterceptTouchEvent işlevini devre dışı bırakarak sorunu azalttım. – Leo

İlgili konular