2012-09-06 23 views
5

Uso un SlidingDrawer como mi diseño principal. Dentro del área de contenido, tengo un Fragmento (que contiene un ListView). Cuando la actividad primero carga todo es genial, la vista de lista se desplaza correctamente.ListView en SlidingDrawer pierde el foco después de onResume

Cuando comienzo una actividad diferente y luego vuelvo, el primer movimiento de desplazamiento que intento es interceptado por SlidindDrawer, y lo abre o lo cierra. Tan pronto como detiene el desplazamiento y levanta su dedo, el ListView nuevamente puede desplazarse.

Me gustaría que el ListView pueda desplazarse cuando se reanude la actividad. Y, en general, solo podrá controlar si SlidingDrawer es el que obtiene el foco.

ACTUALIZACIÓN:

que han reducido el problema abajo un poco. He extendido el Desplazador deslizante para permitir hacer clic en los botones del asa con el siguiente código.

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

Si comento la función onInterceptTouchEvent, todo parece funcionar normalmente.

Respuesta

0

Noté que llama al super.onInterceptTouchEvent(event) dos veces. ¿Por qué? Esa podría ser la razón del problema.

+0

Bueno, sí, esa es la causa del problema. Sin embargo, la razón por la que se llama en la primera línea es para habilitar la acción de arrastre incluso cuando se arrastran los botones en los que se puede hacer clic. He mitigado el problema desactivando el primer super.onInterceptTouchEvent para un par de eventos después de que la actividad se haya reanudado. – Leo

Cuestiones relacionadas