2014-01-24 58 views
1

我在適配器的方法getView下面的代碼(填充一個ListView)的ListView,檢查時getView被稱爲最後一次

public View getView(int position, View parent, ViewGroup root) { 
    View view = LayoutInflater.from(getActivity()).inflate(R.layout.my_layout, null); 
    ImageView imageView = view.findViewById(R.id.myImageView); 
    String address = addresses[position]; 
    MyNetworkLibrary.loadAndSetImage(address, imageView); 
    return view; 
} 

ListView中的細胞具有的ImageView中,他們加載遠程圖像。

方法MyNetworkLibrary.loadAndSetImage下載遠程圖像,並在收到響應時將其設置在我的ImageView中。 問題是,對於ListView的每一行,getView方法通常會不止一次地調用,儘管我使用了緩存,因爲圖像沒有進入緩存,我的應用程序對每行執行了多個請求。

有沒有辦法知道什麼時候getView被最後一次調用一行?或者,您是否想過更好的解決方案?

+0

在你的佈局,有什麼價值您爲layout_width設置? – nKn

+0

width = match_parent,height = wrap_content – Massimo

+0

每次顯示行時都會調用getView,所以如果用戶上下滾動,那麼沒有真正的「最後一次調用」來爲該行getView。「因爲圖像不是緩存「>>爲什麼你沒有緩存你的圖片?相反的意思是,每次調用getView時網絡調用都會對性能造成影響...... – 2Dee

回答

1

調用getView()多於預期的問題試圖在此question中澄清。既然這只是我的想法,我並不確定,但我認爲你提出的問題的方法不是正確的 - 我的意思是,你不應該需要重複計算了多少次getView()稱爲,而不是它有效地處理分配。

作爲替代方法,您可以使用LazyList引用getView()方法中的每行圖像加載圖像。但還有另一種可能的解決方案(我認爲它也更優雅),我在另一個question中提出了它。希望它可以幫助你。

相關問題