2013-07-16 16 views
7

Ho una scrollview all'interno di una scrollview. L'xml è cosìScrollview all'interno di una scrollview nel numero di Android

<RelativeLayout .... 
    <ScrollView..... 
     <RelativeLayout .... 
      <Button..... 
      <Button .... 
      <ScrollView 
      <RelativeLayout .... 
       .......... 
       </RelativeLayout> 
      </ScrollView> 
     </RelativeLayout> 
    </ScrollView> 
</RelativeLayout> 

in questa seconda scrollview nello scorrimento senza problemi. può dare una soluzione per questo. Ho provato molte soluzioni fornite in internet ma non funzionanti.

+3

Non penso vista di scorrimento all'interno ScrollView funzionerà – KOTIOS

+0

mi può u raccontare esatto richiesto – KOTIOS

+2

Non è una buona pratica avere 2 immagini di scorrimento che scorrono nella stessa direzione l'una dentro l'altra, anche se funziona –

risposta

20

Prova questo codice. Si sta lavorando per me`

parentScrollView.setOnTouchListener(new View.OnTouchListener() { 

public boolean onTouch(View v, MotionEvent event) 
{ 
    findViewById(R.id.childScrollView).getParent().requestDisallowInterceptTouchEvent(false); 
return false; 
} 
}); 
childScrollView.setOnTouchListener(new View.OnTouchListener() { 

public boolean onTouch(View v, MotionEvent event) 
{ 

// Disallow the touch request for parent scroll on touch of 
// child view 
v.getParent().requestDisallowInterceptTouchEvent(true); 
return false; 
} 
});` 
+0

ha funzionato perfettamente, grazie! – deimos1988

+0

per me questo è importante, il bambinoScrollView non riceverà il suo onuch qualunque cosa io faccia. – SjoerdvGestel

+0

ringrazia il suo lavoro per me come previsto. –

5

Una soluzione diversa è quella di utilizzare questa classe come la classe genitore

public class NoInterceptScrollView extends ScrollView { 

    public NoInterceptScrollView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    @Override 
    public boolean onInterceptTouchEvent(MotionEvent ev) { 
     return false; 
    } 

} 
+0

Preferirei che fosse una soluzione più semplice –

+0

sei il mio eroe! – Draelach

+0

Perfetto .. Dopo una lunga lotta, ho trovato questo è buono e migliore .. senza sforzo .. – Brendon

0

ho dovuto migliorare la soluzione di Deepthi dal momento che non ha funzionato per me; Immagino perché la mia scrollview di mio figlio è piena di viste (intendo le viste dei bambini usano tutto lo spazio di disegno della scrollview). Per renderlo pienamente funzionale, ho dovuto impedire anche la richiesta di contatto per scorrimento genitore sul tocco di tutte le visualizzazioni dei bambini all'interno della vista del bambino di scorrimento:

parentScrollView.setOnTouchListener(new View.OnTouchListener() { 
    public boolean onTouch(View v, MotionEvent event) 
    { 
     findViewById(R.id.childScrollView).getParent().requestDisallowInterceptTouchEvent(false); 
     return false; 
    } 
}); 
childScrollView.setOnTouchListener(new View.OnTouchListener() { 
    public boolean onTouch(View v, MotionEvent event) 
    { 
     // Disallow the touch request for parent scroll on touch of 
     // child view 
     v.getParent().requestDisallowInterceptTouchEvent(true); 
     return false; 
    } 
});` 
childScrollviewRecursiveLoopChildren(parentScrollView, childScrollView); 
public void childScrollviewRecursiveLoopChildren(final ScrollView parentScrollView, View parent) { 
    for (int i = ((ViewGroup) parent).getChildCount() - 1; i >= 0; i--) { 
     final View child = ((ViewGroup) parent).getChildAt(i); 
     if (child instanceof ViewGroup) { 
      childScrollviewRecursiveLoopChildren(parentScrollView, (ViewGroup) child); 
     } else { 
      child.setOnTouchListener(new View.OnTouchListener() { 
       public boolean onTouch(View v, MotionEvent event) 
       { 
        // Disallow the touch request for parent scroll on touch of 
        // child view 
        parentScrollView.requestDisallowInterceptTouchEvent(true); 
        return false; 
       } 
      }); 
     } 
    } 
}