6

I wprowadziły klasę słuchacza do wykrywania koniec widoku przewijania odnosząc link https://gist.github.com/marteinn/9427072onScrollChanged opalanych wiele razy na koniec przewijania w Scrollview

public class ResponsiveScrollView extends ScrollView { 

private OnBottomReachedListener listener; 

public ResponsiveScrollView(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()); 
    if (diff == 0 && listener!= null) { 
     listener.onBottomReached(this); 
    } 
    super.onScrollChanged(l, t, oldl, oldt); 
} 

public OnBottomReachedListener getBottomChangedListener() { 
     return listener; 
} 

public void setBottomReachesListener(OnBottomReachedListener onBottomReachedListener) { 
    this.listener = onBottomReachedListener; 
} 

public interface OnBottomReachedListener { 
    public void onBottomReached(View view); 
    } 
} 

Listener jest ustawiony na Scrollview:

scrollView.setBottomReachesListener(new GenericScrollListerner(this)); 

Moja GenericScrollListerner klasa:

public class GenericScrollListerner implements ResponsiveScrollView.OnBottomReachedListener { 
private Context mContext; 

public GenericScrollListerner(Context context) { 
    this.mContext = context; 
} 

@Override 
public void onBottomReached(View view) { 
    Log.d("ScrollView","Scroll end"); 
    String tag = (String) view.getTag(); 
    Toast.makeText(mContext, "Scroll end with tag" +tag, Toast.LENGTH_SHORT).show(); 
} 

}

Mój problem polega na tym, że onBottomReached strzela dwa razy większość razy. Jak poradzić sobie z tym problemem?

Odpowiedz

1

W końcu znalazłem odpowiedź bez uszczypnąć.

Extend niestandardowy widok przewijania z 'NestedScrollView' zamiast Scrollview

public class ResponsiveScrollView extends NestedScrollView { 

private OnBottomReachedListener listener; 

public ResponsiveScrollView(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()); 
    if (diff == 0 && listener!= null) { 
     listener.onBottomReached(this); 
    } 
    super.onScrollChanged(l, t, oldl, oldt); 
} 

public OnBottomReachedListener getBottomChangedListener() { 
     return listener; 
} 

public void setBottomReachesListener(OnBottomReachedListener onBottomReachedListener) { 
    this.listener = onBottomReachedListener; 
} 

public interface OnBottomReachedListener { 
    public void onBottomReached(View view); 
    } 
} 

Powyższy kod zadziała

4

Dzieje się tak z powodu przewyższenia. Należy dodać następującą linię w Scrollview deklaracji XML

android:overScrollMode="never" 

Jeśli problem nadal utrzymują następnie kliknąć na poniższy uszczypnąć

@Override 
    protected void onScrollChanged(int l, int t, int oldl, int oldt) { 
     View view = getChildAt(getChildCount() - 1); 
     int diff = view.getBottom() - (getHeight() + getScrollY()); 
     if (diff == 0 && listener != null && !stopTwice) { 
      stopTwice=true; 
      listener.onBottomReached(this); 
     }else{ 
      stopTwice=false; 
     } 
     super.onScrollChanged(l, t, oldl, oldt); 
    } 
+0

Dzięki. Działa –

+0

Który z nich zadziałał? Deklaracja xml lub modyfikacja? @remyathekkuvettil – Nizam

+0

ulepszenie zadziałało dla mnie @Nizam –

Powiązane problemy