我的项目中有一个问题是:
- 我有一个包含1000多个项目的listView。我不希望我的listView一次加载所有1000个项目。我只想在屏幕上显示10个项目,并在列表底部显示“更多”。当我点击“更多”时,它会在我的listView中添加更多10个项目,而我的listView将有20个项目。它可以滚动,“更多”按钮仍然存在,直到我的列表中包含所有1000个项目。
有没有人有建议或代码示例?
在此先感谢,任何帮助都表示赞赏。
答案 0 :(得分:3)
首先 - 如果您不希望所有1000个项目都加载的原因是您认为它使UI“很重”,因为它包含1000个视图,那么您错了。列表视图有一个机械,它只在内存中保存可以看到的项目。当列表适配器的getView()方法的实现正确地重用convert视图参数时,它工作得最好。
如果不是原因 - 那么你可以通过实现适配器在每个模块10位置返回来实现它 - 一个实现onClick监听器的按钮,它将项添加到逻辑数据,然后调用notifyDataSetChanged()来刷新UI适当地对新数据
答案 1 :(得分:0)
如果您使用的是网络服务。尝试创建一个存储过程,您可以使用它来提供项目数量。每次按下按钮更多。存储过程将检索以前的数据+ 10多个数据项?这可能是一个选择
答案 2 :(得分:0)
经过一个小时的研究,我解决了我的问题:
- 我实现setOnScrollListener
以获取我的ListView的lastIndex
- 创建一个线程,使用lastIndex将数据更新为adapter
并添加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