繁体   English   中英

在Android中没有ListView分页的setOnScrollListener()的Web API调用

[英]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页再次加载产品数据。

  2. 同样的情况,当我进行过滤/对产品列表数据进行排序,然后停止上一个任务并从第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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM