【问题标题】:Check if a ScrollView has reached the top of the layout检查 ScrollView 是否已到达布局的顶部
【发布时间】:2016-10-28 00:27:45
【问题描述】:

是否可以检查 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);
}
});

【问题讨论】:

  • 那不是:stackoverflow.com/questions/7318373/… 为你工作吗?
  • 您的问题询问是否可以检查ListView,然后您就如何为列表视图提供答案。您还突然提到了 ScrollView。如果您的问题是关于 ScrollViews,您不能使用 ScrollView.setOnScrollChangeListener
  • @MarcusHooper 我的错,我的意思是 ScrollView ...

标签: java android uiscrollview


【解决方案1】:

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

【讨论】:

  • 是的,就是这样。谢谢!
【解决方案2】:

你可以使用getScrollY()方法(from the View class

【讨论】:

    【解决方案3】:

    在 Kotlin 中:

    scrollView.viewTreeObserver.addOnScrollChangedListener {
        if (!scrollView.canScrollVertically(1)) {
            // Bottom of scroll view.
        }
        if (!scrollView.canScrollVertically(-1)) {
            // Top of scroll view.
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2014-09-17
      • 2011-12-04
      • 2011-05-06
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      • 2015-04-20
      • 1970-01-01
      相关资源
      最近更新 更多