2012-09-06 10 views
5

Io uso uno SlidingDrawer come layout principale. All'interno dell'area del contenuto ho un frammento (che contiene un oggetto ListView). Quando l'attività carica per prima cosa tutto è ottimo, il listview scorre correttamente.ListView in SlidingDrawer perde lo stato attivo dopo onResume

Quando avvio un'attività diversa e poi ritorna, il primo movimento di scorrimento che provo viene intercettato da SlidindDrawer e lo apre o lo chiude. Non appena si interrompe lo scroll e si alza il dito, ListView è nuovamente in grado di scorrere.

Desidero che ListView sia in grado di scorrere quando l'attività riprende. E in genere è in grado di controllare se lo SlidingDrawer è quello che si concentra.

UPDATE:

ho ridotto il problema giù un po '. Ho esteso SLidingDrawer per consentire di fare clic sui pulsanti nell'impugnatura con il seguente codice.

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

Se commento la funzione onInterceptTouchEvent, tutto sembra funzionare normalmente.

risposta

0

Ho notato che chiami lo super.onInterceptTouchEvent(event) due volte. Perché? Questo potrebbe essere il motivo del problema.

+0

Beh, questa è la causa del problema. Tuttavia, il motivo per cui viene chiamato nella prima riga è abilitare il trascinamento dell'azione anche quando vengono trascinati i pulsanti cliccabili. Ho attenuato il problema disabilitando il primo super.onInterceptTouchEvent per un paio di eventi dopo che l'attività è stata ripresa. – Leo

Problemi correlati