如何在滚动时增大ListView

时间:2013-10-04 16:52:29

标签: android android-listview

我有一个ListView和非常大量的项目(如高数百)。我希望能够以20个项目启动ListView,并在用户滚动时增长它,因此它不会像#34;压倒性的"

我将如何做到这一点?

3 个答案:

答案 0 :(得分:1)

我是这样做的:

我制作了一个可观察的滚动视图类。

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。

答案 1 :(得分:0)

您可以实施pull to refresh。使用完整的源代码检查here

答案 2 :(得分:0)

您可以使用Endless适配器,它只是在您到达列表视图的底部时通知您,以便您可以向适配器添加更多数据。比如每次到达底部时添加20个元素。

这是链接:

https://github.com/commonsguy/cwac-endless