我有一个ListView,首先它向下滚动,现在当我们向上滚动时,它达到最高点.我想检测一下.有什么办法吗?我正在用api级别开发应用程序8.Pls帮助..
Gra*_*eme 41
编辑
请参阅下面的评论,为什么,特别是在不同的API版本(尤其是后来的版本)上,这不是一个简单的方法,看看你的列表是否在顶部(填充等).但是,它确实为您在API 14以下的设备上提供解决方案的开始:
private boolean listIsAtTop() {
if(listView.getChildCount() == 0) return true;
return listView.getChildAt(0).getTop() == 0;
}
Run Code Online (Sandbox Code Playgroud)
就我多年前的实施情况而言 - 这在当时完美无缺.
top*_*duo 21
我知道这个问题很老,但它在Google搜索结果中显示出来.API级别14中引入了一种新方法,可以提供我们所需的内容:
http://developer.android.com/reference/android/view/View.html#canScrollVertically%28int%29
对于较旧的平台,可以使用见下面的编辑.ViewCompatv4支持库中的类似静态方法.
与Graeme的方法不同,此方法不受内部视图重用ListView和/或标头偏移引起的问题的影响.
编辑:最终解决方案
我在SwipeRefreshLayout的源代码中找到了一个方法来处理这个问题.它可以改写为:
public boolean canScrollUp(View view) {
if (android.os.Build.VERSION.SDK_INT < 14) {
if (view instanceof AbsListView) {
final AbsListView absListView = (AbsListView) view;
return absListView.getChildCount() > 0
&& (absListView.getFirstVisiblePosition() > 0 || absListView
.getChildAt(0).getTop() < absListView.getPaddingTop());
} else {
return view.getScrollY() > 0;
}
} else {
return ViewCompat.canScrollVertically(view, -1);
}
}
Run Code Online (Sandbox Code Playgroud)
如果传入视图是自定义视图,则可能需要添加自定义逻辑.
Tim*_*win 12
我的朋友们,将Graeme的回答与onScroll方法相结合......
listView.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
if(firstVisibleItem == 0 && listIsAtTop()){
swipeRefreshLayout.setEnabled(true);
}else{
swipeRefreshLayout.setEnabled(false);
}
}
});
private boolean listIsAtTop() {
if(listView.getChildCount() == 0) return true;
return listView.getChildAt(0).getTop() == 0;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
20338 次 |
| 最近记录: |