2012-09-06 9 views
5

Ich verwende einen SlidingDrawer als mein Hauptlayout. Im Inhaltsbereich habe ich ein Fragment (das eine ListView enthält) Wenn die Aktivität zum ersten Mal alles lädt, scrollt die Listview korrekt.ListView in SlidingDrawer verliert Fokus nach onResume

Wenn ich eine andere Aktivität starte und dann zurückkomme, wird die erste Scroll-Bewegung, die ich versuche, vom SlidindDrawer abgefangen und entweder geöffnet oder geschlossen. Sobald Sie den Bildlauf stoppen und Ihren Finger aufnehmen, kann der ListView wieder scrollen.

Ich möchte die ListView in der Lage zu scrollen, wenn die Aktivität wieder aufgenommen wird. Und generell können Sie kontrollieren, ob der SlidingDrawer der Fokus ist.

UPDATE:

Ich habe das Problem nach unten ein wenig verengt. Ich habe den SLidingDrawer erweitert, um das Klicken auf Schaltflächen im Handle mit dem folgenden Code zu ermöglichen.

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

Wenn ich die onInterceptTouchEvent Funktion auf Kommentar, scheint alles normal zu arbeiten.

Antwort

0

Ich bemerkte, dass Sie zweimal super.onInterceptTouchEvent(event) aufrufen. Warum? Das könnte der Grund für das Problem sein.

+0

Nun ja, das ist die Ursache für das Problem. Der Grund dafür, dass es in der ersten Zeile aufgerufen wird, besteht darin, die Drag-Aktion auch dann zu aktivieren, wenn die klickbaren Schaltflächen gezogen werden. Ich habe das Problem gemildert, indem ich das erste super.onInterceptTouchEvent für einige Ereignisse deaktiviert habe, nachdem die Aktivität wieder aufgenommen wurde. – Leo