我正在製作應用程序,並且我正在使用網格視圖來顯示所有圖像,問題是我有很多圖像,大約有12,000個,而且我不知道我們不想在開始時加載它們,因爲讓我們面對它,它會一直持續下去,所以我想知道一旦gridview達到最後,訪問服務器獲取更多項目的最佳方式是什麼。Android - 在網格視圖已達到結尾時加載更多項目
謝謝。
我正在製作應用程序,並且我正在使用網格視圖來顯示所有圖像,問題是我有很多圖像,大約有12,000個,而且我不知道我們不想在開始時加載它們,因爲讓我們面對它,它會一直持續下去,所以我想知道一旦gridview達到最後,訪問服務器獲取更多項目的最佳方式是什麼。Android - 在網格視圖已達到結尾時加載更多項目
謝謝。
一種方法是啓動服務器對適配器getView()
中的映像的請求。當請求完成時,您在ImageView
上設置檢索到的位圖。在Android開發人員博客中有對此技術的深入描述:Multithreading For Performance | Android Developers Blog。大多數服務器速度足夠快,以至於顯示圖像的延遲時間並不令人反感。
但是,如果你想顯示在ImageViews
之前加載圖像,還有一種方法,你可以用OnScrollListener
做到這一點,一個AsyncTask
,併爲`GridView控件列表適配器。
假設你有一個常量final int THRESHOLD = 50;
和一個從零開始的變量lastItem
。
當用戶顯示您的GridView
時,AsyncTask
會啓動並檢索前100張圖像。在onPostExecute()
中,它將圖像添加到適配器並調用notifyDataSetChanged()
。它也增加了100到lastItem
。
所以現在你的適配器有100個圖像。用戶正在滾動圖像並調用OnScrollListener
。
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount)
if (firstVisibleItem >= lastItem - THRESHOLD) {
new FetchImageAsyncTask().execute();
}
}
你AsyncTask
執行,lastItem
更新爲200,和您的適配器獲得100張圖像。
然後用戶滾動一些,然後重新開始。
通過使用閾值,用戶可以在列表結束之前滾動另外50張圖像,並且可能有足夠的時間加載下100張圖像。
爲了實現上滾動結束gridview的
gridView.setOnScrollListener(new AbsListView.OnScrollListener(){
@Override
public void onScroll(AbsListView view,
int firstVisibleItem, int visibleItemCount,
int totalItemCount) {
//Algorithm to check if the last item is visible or not
final int lastItem = firstVisibleItem + visibleItemCount;
if(lastItem == totalItemCount){
// here you have reached end of list, load more data
fetchMoreItems();
}
}
@Override
public void onScrollStateChanged(AbsListView view,int scrollState) {
//blank, not required in your case
}
});
@Pachu使用fetchMoreItems()方法獲取項目。 –
使用fetchMoreItems()方法添加獲取項目的邏輯。 –
您可以使用基於分頁的web服務,並使用swipetorefreshlayout的負載更多的物品。你試過了什麼? – USKMobility
我想使用android提供的網格視圖,我確定有一種方法可以做到這一點 – Pachu
使用通用圖像加載器庫或帶有gridview的picasso進行圖像加載 – USKMobility