android中不带setOnScrollListener()的Listview分页Web API调用



工作环境总结

我在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);

  1. timer任务在进入详细信息屏幕时停止执行当我回到列表屏幕时,它不会加载下一页数据我必须从第1页重新加载产品数据

  2. 同样的情况下,当我去过滤/排序产品列表数据,然后停止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()调用的频率要低得多,应该会有所帮助。

最新更新