我有一个 ListView 和大量的项目(比如数百个)。我希望能够从 20 个项目开始 ListView 并随着用户滚动而增长它,因此它不会像“压倒性”
我该怎么做呢?
我有一个 ListView 和大量的项目(比如数百个)。我希望能够从 20 个项目开始 ListView 并随着用户滚动而增长它,因此它不会像“压倒性”
我该怎么做呢?
这是我的做法:
我做了一个可观察的滚动视图类。
public class ObservableScrollView extends ScrollView{
private ScrollViewListener scrollViewListener = null;
public ObservableScrollView(Context context) {
super(context);
}
public ObservableScrollView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public ObservableScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public void setScrollViewListener(ScrollViewListener scrollViewListener) {
this.scrollViewListener = scrollViewListener;
}
@Override
protected void onScrollChanged(int x, int y, int oldx, int oldy) {
super.onScrollChanged(x, y, oldx, oldy);
if(scrollViewListener != null) {
scrollViewListener.onScrollChanged(this, x, y, oldx, oldy);
}
}
}
我创建了一个名为 Scroll View Listener 的新界面。
public interface ScrollViewListener {
void onScrollChanged(ObservableScrollView scrollView, int x, int y, int oldx, int oldy);
}
然后在活动中我实现了这个接口。
public class MainActivity extends Activity implements
ScrollViewListener {
然后它将强制您使用以下方法。
// scroll view listener. used to load new page if user scrolls to bottom
@Override
public void onScrollChanged(ObservableScrollView scrollView, int x, int y,
int oldx, int oldy) {
View view = (View) scrollView
.getChildAt(scrollView.getChildCount() - 1);
int diff = (view.getBottom() - (scrollView.getHeight() + scrollView
.getScrollY()));
if (diff <= DISTANCE_FROM_BOTTOM) {
LOADNEXTTHINGS();
}
}
DISTANCE_FROM_BOTTOM
如果我没记错的话,它以像素为单位。
请记住,LOADNEXTTHINGS()
如果用户正在更改滚动位置并且在diff <= DISTANCE_FROM_BOTTOM
. 你应该有一个加载值来控制这个......比如
if(diff <= DISTANCE_FROM_BOTTOM && !loadingNextThings){
loadingNextThings = true;
LOADNEXTTHINGS();
}
然后当你完成加载接下来的事情时loadingNextThings = false;
就个人而言,我更喜欢使用 FSM。
您可以实施 pull to refresh 。在这里查看完整的源代码
您可以使用 Endless 适配器,它只是在您到达列表视图的底部时通知您,以便您可以向适配器添加更多数据。就像每次到达底部时添加 20 个元素。
链接在这里: