2013-07-16 29 views
7

Ich habe eine Scrollview in einem Scrollview. Der XML ist wie folgtScrollview in einem Scrollview in Android-Ausgabe

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

in diesem zweiten Scrollview in nicht reibungslos scrollen. kann dafür eine Lösung geben. Ich habe versucht eine Menge Lösung im Internet gegeben, aber nicht funktioniert.

+3

Ich glaube nicht, scroll Blick in Scrollview arbeiten – KOTIOS

+0

u kann mir das sagen exact requirmrnt – KOTIOS

+2

Es ist nicht eine gute Übung, 2 scrollViews zu haben, die in der gleichen Richtung ineinander gleiten, auch wenn es funktioniert –

Antwort

20

Versuchen Sie diesen Code. Es arbeitet für 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

funktionierte tadellos, danke! – deimos1988

+0

für mich das noting, das childScrollView erhält nicht sein ontouch, was auch immer ich tue. – SjoerdvGestel

+0

Danke Seine Arbeit für mich wie erwartet. –

5

Eine andere Lösung ist es, diese Klasse als übergeordnete Klasse verwenden

public class NoInterceptScrollView extends ScrollView { 

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

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

} 
+0

Ich würde dies als eine einfachere Lösung bevorzugen –

+0

du bist mein Held! – Draelach

+0

Perfekt .. Nach langem Kampf, fand ich das ist gut und am besten .. mühelos .. – Brendon

0

I Deepthi-Lösung zu verbessern hatte, da es nicht für mich arbeiten; Ich schätze, weil mein Kinder-Scrollview voller Ansichten ist (ich meine, Child-Views verwenden den gesamten Scrollview-Zeichenraum). Um es voll funktionsfähig zu machen, musste ich auch die Touch-Anfrage nicht zulassen für Eltern blättern auf Touch aller Kinder Blick in das Kind scroll Ansicht:

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