工作环境总结
我在android应用程序工作,我们必须显示产品列表。有一个带有分页功能的Web API。通常我们使用setOnScrollListener()函数,当用户滚动列表时,web api调用下一页并加载数据。
从web api中获取下一页数据,而不使用Listview中的setOnScrollListener()函数。
让我详细解释一下:首先,产品api调用页码1,从服务器获取数据并在listview中设置,现在我想从服务器加载下一页(2)数据并在listview中设置,等等,而不使用setOnScrollListener()函数。
加载产品列表,如Flipkart和其他电子商务应用程序
setOnScrollListener()的工作代码
下面是使用setOnScrollListener()函数的代码。当用户向下滚动到最后一项时,它会点击web api并加载下一页的数据,以此类推。
mProductGV.setOnScrollListener(new EndlessScrollListener() {
@Override
public void onLoadMore(int page, int totalItemsCount) {
// Triggered only when new data needs to be appended to the list
// TotalPage is number of pages which is come from server..
if (page > TotalPage) {
} else {
pageNum = page;
// hit api to get the product data for next page.
getProductData();
}
}
@Override
public void onLoadViewItem(int viewItem, int TotalItem){
}
});
What I tried
通过使用TimerTask,我调用api从服务器获取数据并加载它。
private final static int DELAY = 4000;
private final Handler handler = new Handler();
private final Timer timer = new Timer();
private final TimerTask task = new TimerTask() {
private int counter = 1;
public void run() {
handler.post(new Runnable() {
public void run() {
getproductList(0);
pageNum++;
}
});
if(++counter > TotalPage) {
timer.cancel();
}
}
};
// call in on create function..
timer.schedule(task, DELAY, DELAY);
timer任务在进入详细信息屏幕时停止执行当我回到列表屏幕时,它不会加载下一页数据我必须从第1页重新加载产品数据
同样的情况下,当我去过滤/排序产品列表数据,然后停止prev任务,重新启动定时器任务从第1页。
我很困惑……我知道有什么愚蠢的错误是我无法察觉的。所以请提出任何类似的例子或任何其他最好的解决方案。
谢谢…
你可以覆盖getItem()在你的BaseAdapter有回调,当新的项目被添加到ListView。通过比较项目列表大小,您可以决定是否需要获取更多数据。
public Object getItem(int position) {
super.getItem(position);
if (closeEnoughToPullData(position)) {
pullData();
}
}
// will return true, if loaded item 3 items away from end
public boolean closeEngoughToPullData(int position) {
return items.size() - position < 3;
}
可能不是您问题的确切解决方案,但是getItem()调用的频率要低得多,应该会有所帮助。