[英]Web API call without setOnScrollListener() of Listview pagination in android
工作环境概要
我正在使用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){
}
});
我尝试了什么
通过使用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);
问题
计时器任务在进入详细信息屏幕时停止执行,而当我返回到列表屏幕时,它不会加载下一页数据,因此我必须从第1页再次加载产品数据。
同样的情况,当我进行过滤/对产品列表数据进行排序,然后停止上一个任务并从第1页再次重新启动计时器任务时。
我对此感到困惑。我知道我无法捕捉到一些愚蠢的错误。 因此,请提出任何类似的示例,或为此提供其他最佳解决方案。
谢谢..
将新项目添加到ListView时,可以重写BaseAdapter中的getItem()以具有回调。 通过与项目列表大小进行比较,您可以确定是否是获取更多数据的好时机。
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()调用的频率要低得多,应该会有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.