2015-12-31 21 views
2

我正在製作應用程序,並且我正在使用網格視圖來顯示所有圖像,問題是我有很多圖像,大約有12,000個,而且我不知道我們不想在開始時加載它們,因爲讓我們面對它,它會一直持續下去,所以我想知道一旦gridview達到最後,訪問服務器獲取更多項目的最佳方式是什麼。Android - 在網格視圖已達到結尾時加載更多項目

謝謝。

+0

您可以使用基於分頁的web服務,並使用swipetorefreshlayout的負載更多的物品。你試過了什麼? – USKMobility

+0

我想使用android提供的網格視圖,我確定有一種方法可以做到這一點 – Pachu

+0

使用通用圖像加載器庫或帶有gridview的picasso進行圖像加載 – USKMobility

回答

0

一種方法是啓動服務器對適配器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張圖像。

2

爲了實現上滾動結束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 
      } 
     }); 
+0

@Pachu使用fetchMoreItems()方法獲取項目。 –

+0

使用fetchMoreItems()方法添加獲取項目的邏輯。 –

相關問題