-1

我在我的项目中遇到的问题是:

-我有一个包含 1000 多个项目的列表视图。我不希望我的 listView 一次加载所有 1000 个项目。我只想在屏幕上显示 10 个项目,并在列表底部显示“更多”。当我单击“更多”时,它将向我的 listView 添加更多 10 个项目,而我的 listView 将有 20 个项目。它可以滚动并且“更多”按钮仍然存在,直到我的列表包含所有 1000 个项目。

有人有建议或代码示例吗?

在此先感谢,任何帮助表示赞赏。

4

3 回答 3

3

首先 - 如果您不希望所有 1000 个项目都加载的原因是您认为它使 UI “沉重”,因为它包含 1000 个视图,那么您就错了。列表视图有一个机制,它只负责在内存中保存假定可见的项目。当列表适配器的 getView() 方法的实现正确地重新使用转换视图参数时,它工作得最好。

如果不是原因 - 那么您可以通过实现适配器在每个模块 10 位置返回来实现它 - 一个实现 onClick 侦听器的按钮,该侦听器将项目添加到逻辑数据,然后调用 notifyDataSetChanged() 以将 UI 正确刷新到新数据

于 2012-05-29T07:38:27.877 回答
0

经过一个小时的研究,我解决了我的问题是:

-我实现setOnScrollListener获取我的 ListView 的 lastIndex

-创建一个线程来更新数据以adapter使用 lastIndex 添加 10 个项目。

这里是描述

 gtumcaDynamicListView.setOnScrollListener(new OnScrollListener() {

    @Override
    public void onScrollStateChanged(AbsListView view, int scrollState) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onScroll(AbsListView view, int firstVisibleItem,
            int visibleItemCount, int totalItemCount) {
        // what is the bottom iten that is visible
        int lastInScreen = firstVisibleItem + visibleItemCount;
        if((lastInScreen == totalItemCount) && !(loadingMore)) {
            //Run background thread
            Thread tt = new loadBackgroung(lastInScreen, adaptor);
            tt.start();
        }
    }
});


class loadBackgroung extends Thread{
public int lastIndex;
public MyCustomAdaptor adaptor;


public loadBackgroung(int lastIndex, MyCustomAdaptor adaptor) {
    super();
    this.lastIndex = lastIndex;
    this.adaptor = adaptor;
}

@Override
public void run() {


    handler.post(new Runnable() {

        @Override
        public void run() {
            // TODO Auto-generated method stub
            for(int i = 0;i<10;i++){
                gtuMcaBean.add(new GtuMcaBean((lastIndex + i)+" First", (lastIndex + i)+" Last", (lastIndex + i)+" Birthdate"));
            }
            adaptor.notifyDataSetChanged();
        }
    });
    loadingMore = false;

}

完整代码在:http ://code.google.com/p/dynamic-listview/source/checkout

于 2012-05-29T09:38:35.790 回答
0

如果您使用的是网络服务。尝试创建一个存储过程,在其中给出项目的数量。每次多按一次按钮。存储过程将检索以前的数据+ 10 个数据项?这也许是一个选择

于 2012-05-29T08:12:01.553 回答