2016-06-25 2 views
1

Можно ли проверить, прокручивается ли прокрутка прокрутки вверху?Проверьте, достиг ли ScrollView вершины макета

Я хочу проверить это, чтобы включить SwipeRefreshLayout, в противном случае его отключить.

С ListView это может быть сделано, как это, но нет setOnScrollListener для 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

не так: http://stackoverflow.com/questions/7318373/how-to-find-out-if-listview-has-scrolled- к-топ-самый-положение работает для вас? – user2699706

+0

В вашем вопросе спрашивается, можно ли проверить «ListView», а затем дать ответ о том, как это сделать для просмотра списка. Вы также указываете ScrollView в синем. Если ваш вопрос о ScrollViews, вы не можете использовать 'ScrollView.setOnScrollChangeListener' –

+0

@MarcusHooper. Мой плохой, я имел в виду ScrollView ... –

ответ

3

Это link может оказаться полезной для Вас. Он показывает, как установить прослушиватель прокрутки для ScrollView. Затем обратитесь к ответу @antonio.

В вашем случае это будет:

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

Да, это все. Благодаря! –

Смежные вопросы