2016-12-03 1 views
0

Ich habe Scrollview decken viele Elemente im Inneren. Und ich möchte überprüfen, ob scrollview Scroll bis zum Ende scrool ist. Wie man das umsetzt. bitte jemand empfehle mich. Vielen Dank.Wie zu überprüfen, ob Bildlauf ist nach unten scrollen Android Studio

<ScrollView 
    android:id="@+id/scrollview" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentTop="true" > 

     <LinearLayout 
      android:id="@+id/layout" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="vertical" 
      android:showDividers="end|middle" > 
       <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text=" 
       text....... 
       " /> 
       <TextView 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text=" 
        text....... 
       " /> 
     </LinearLayout> 
    </ScrollView> 
+0

Ich werde vorschlagen Listview oder Recycler Ansicht verwenden zum Scrollen –

+0

@NitinKarande Wenn Ich benutze Recyclerview oder listview Ich brauche benutzerdefinierte header footer .... schwer für mich –

+0

Sie wollen, wenn wir unten scrollen und Sie sind in letzten Artikel .. Anzeige Kopf- und Fußzeile habe ich Recht? –

Antwort

1

Erstellen Sie eine benutzerdefinierte Scrollview wie folgt:

public class CustomScrollView erstreckt Scroll {OnBottomReachedListener mListener;

public CustomScrollView(Context context, AttributeSet attrs, 
        int defStyle) { 
super(context, attrs, defStyle); 
} 

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

public CustomScrollView(Context context) { 
super(context); 
} 

@Override 
protected void onScrollChanged(int l, int t, int oldl, int oldt) { 
View view = getChildAt(getChildCount() - 1); 
int diff = (view.getBottom() - (getHeight() + getScrollY())) - view.getPaddingBottom(); 

if (diff <= 0 && mListener != null) { 
    mListener.onBottomReached(); 
} 

super.onScrollChanged(l, t, oldl, oldt); 
} 

// Getters & Setters 

public OnBottomReachedListener getOnBottomReachedListener() { 
return mListener; 
} 

public void setOnBottomReachedListener(
    OnBottomReachedListener onBottomReachedListener) { 
mListener = onBottomReachedListener; 
} 

//Event listener. 

public interface OnBottomReachedListener { 
public void onBottomReached(); 
} 

}

In Ihrer Haupttätigkeit:

CustomScrollView scroll = (CustomScrollView) findViewById (R.id.scrollView);

scrollView.setOnBottomReachedListener (neu CustomScrollView.OnBottomReachedListener() {

@Override 
    public void onBottomReached() { 
     // ScrollView Reached bottom 
    } 
}); 

in der XML-Datei:

<CustomScrollView android:id="@+id/scrollView" android:layout_width="match_parent" android:layout_height="wrap_content" > 

</CustomScrollView> 
+0

Fehler Aktivität ComponentInfo {kh.com.iknow.scrolllistener/kh.com.iknow.scrolllistener.MainActivity}: android.view.InflateException: Binär XML-Datei Zeile # 13: Fehler beim Aufblasen der Klasse CustomScrollView

+0

In Ihrem XML-Format müssen Sie den vollständigen Pfad Ihres CustomScrollView angeben. Zum Beispiel; Ich habe meine CustomScrollView in com.mysample.customviews Paket dann muss ich schreiben

+0

Es funktioniert perfekt, danke –

0

Sie können dies tun, indem die Höhe des ScrollView zu vergleichen und Ihre LinearLayout:

ScrollView scrollView = (ScrollView) findViewById(R.id.scrollview); 
LinearLayout linearLayout = (LinearLayout) findViewById(R.id.layout); 

if(linearLayout.getMeasuredHeight() <= scrollView.getScrollY() + 
     scrollView.getHeight()) { 
    //scroll view is at the very bottom 
} 
else { 
    //scroll view is in somewhere middle 
} 
+0

Es funktioniert nicht –

+0

Natürlich, weil dieser Code sofort aufgerufen. –

Verwandte Themen