2016-06-25 9 views
1

Kann überprüft werden, ob ein ScrollView ganz oben scrollt?Prüfen, ob ein ScrollView das obere Ende des Layouts erreicht hat

Ich möchte dies überprüfen, damit ich ein SwipeRefreshLayout aktivieren kann, ansonsten behalte es deaktiviert.

Mit einem Listview es wie dies geschehen könnte, aber es gibt keine setOnScrollListener für ScrollViews

listView.setOnScrollListener(new OnScrollListener() { 

    @Override 
    public void onScrollStateChanged(AbsListView view, int scrollState) { 
    } 

    @Override 
    public void onScroll(AbsListView view, int firstVisibleItem, 
      int visibleItemCount, int totalItemCount) { 
     boolean enable = false; 
     if(listView != null && listView.getChildCount() > 0){ 
      // check if the first item of the list is visible 
     boolean firstItemVisible = listView.getFirstVisiblePosition() == 0; 
     // check if the top of the first item is visible 
     boolean topOfFirstItemVisible = listView.getChildAt(0).getTop() == 0; 
     // enabling or disabling the refresh layout 
     enable = firstItemVisible && topOfFirstItemVisible; 
    } 
    swipeRefreshLayout.setEnabled(enable); 
} 
}); 
+0

ist nicht so: http://stackoverflow.com/questions/7318373/how-to-find-out-if-listview-has-scrolled- To-Top-Position für Sie arbeiten? – user2699706

+0

Ihre Frage fragt, ob es möglich ist, eine 'ListView' zu prüfen und dann eine Antwort zu geben, wie es für eine Listenansicht gemacht wird. Sie erwähnen auch eine ScrollView aus heiterem Himmel. Wenn Ihre Frage über ScrollViews ist, können Sie 'ScrollView.setOnScrollChangeListener' nicht verwenden –

+0

@MarcusHooper Mein schlechtes, ich meinte ScrollView ... –

Antwort

3

Diese link könnte Sie hilfreich sein. Es zeigt, wie Scroll-Listener für ScrollView festgelegt wird. Beziehen Sie sich dann auf @antonio antwort.

Für Ihren Fall wäre es:

mScrollView.getViewTreeObserver().addOnScrollChangedListener(new ViewTreeObserver.OnScrollChangedListener() { 
     @Override 
     public void onScrollChanged() { 
      int scrollY = mScrollView.getScrollY(); //for verticalScrollView 
      if (scrollY == 0) 
       swipeRefresh.setEnabled(true); 
      else 
       swipeRefresh.setEnabled(false); 
     } 
    }); 
+0

Yup das ist es. Vielen Dank! –