簡體   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