![](/img/trans.png)
[英]How can i prevent recyclerview scrolling to start when i load more data
[英]How can I load more items when scrolling down in listview?
首先我想說:這個問題不可重復!
我已經閱讀了很多有關向下滾動時加載更多項目的問題。
這對我最有幫助。
但是我讀的所有問題都不能解釋基本原理。
所以,我的意思是:
我的應用程序從json獲取數據並將其顯示在ListView
,但是無法通過一個request
從數據庫加載所有項目。 該應用程序崩潰了…
解決方案是僅加載10個項目,然后再次向下滾動10個項目。
我考慮了以下兩種不同的選擇:
不需要代碼,因為我想知道這樣做的原理。
通常,您每次都會從服務器加載10個新項目。 使用頁面參數來確定需要哪些10個項目以及將它們放置在何處。
一次加載所有項目可能太昂貴了:延遲可能會很長,並且用戶的數據計划也不會令人滿意。 顯然取決於有多少項目以及它們具有什么內容。
您將必須找到權衡。 根據您的數據大小,有時解析所有這些並將其保存在本地數據庫中是有意義的。
僅針對200-300條記錄,您不想在列表中每50條記錄后再進行一次api調用。 記住,使用移動應用程序時,用戶經常上下滾動。 您可能不必要向服務器發送多個請求,這可能會導致過載(取決於用戶數量)。
如果使用選項2,則可以使用JobIntentService
方法靜默獲取數據並保存在本地。
這種方法還可以讓您的用戶在沒有Internet(脫機模式)的情況下進行交互。
我在應用程序中使用的方法是:
步驟#1:我從服務器加載具有限制的第一組數據,然后將最后一條記錄數據ID存儲在變量中。
步驟#2:將滾動結束偵聽器實現到listView或RecyclerView。
步驟#3: 在滾動結束偵聽器中啟動另一個請求並加載新記錄。(在這里我再次在變量中設置數據ID)
例如:
活動開始時啟動請求,然后執行我之前解釋的操作。
GetBusinesses("&isOpen=2&cat="+Prefrences.getSelectedCategoryId());
然后在您的Scroll End Listener中
GetBusinesses("&isOpen=2&cat="+Prefrences.getSelectedCategoryId()+"&limit=10&lastDataId="+BusinessItems[index].mBusinessId)
編輯為了避免內部GetBusinesses重復API調用()檢查請求先開始,以及這個想法是不是真的開始請求之前,一旦數據被加載並請求創建一個布爾值最初為false,然后在GetBusinesses()函數make完成后,再次使其為假 。 希望對您有所幫助。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.