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.
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