[英]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.