2016-03-23 82 views
0

我有一個帶適配器的ListView。我在ListViewItem上只有一個ImageView對象。當我更改ListViewItems中位圖的內容時,我總是需要撥打adapter.notifyDataSetChanged()。否則,位圖不刷新。我已經在列表視圖中的每個ImageView上嘗試過myImageView.Invalidate(),但這沒有幫助。更新ListView時確實需要notifyDataSetChanged()

一些代碼用於更新列表視圖:

runOnUiThread(new Runnable() 
    { 
     @Override 
     public void run() 
     { 
      Canvas myCanvas = rowItems.get(0).getCanvas(); 
      // draw on canvas 
      adapter.notifyDataSetChanged(); 
     }    
    }); 

現在我的問題:是否有刷新列表視圖(在我的情況下,位圖的內容)或我打電話notifyDataSetChagend替代?謝謝!

+0

Android SDK中的任何地方都沒有'Invalidate()'方法 - 注意Java區分大小寫。有些類有'invalidate()'方法,但不是'Bitmap'。除此之外,請提供一個[mcve]展示您的問題。 – CommonsWare

+1

如果您使用recyclerview而不是listview,那麼您不必調用notifyDataSetChanged。你可以更新單個項目在recylerview – penguin

+0

檢查我的問題關於刷新listviews也許它會幫助:http://stackoverflow.com/questions/32792394/how-to-invalidate-listview-for-new-data-when-using- listadapter – Manny265

回答

2

適配器需要知道數據已更改以便自行刷新,因此有必要這樣做。問題是爲什麼你首先需要替代品!

但是,如果您需要更高性能,您可以通過使用RecyclerView.AdapternotifyItemChanged (int position)通知特定項目發生更改而不是整個項目,如果您仍在使用ListView,則此功能不可用。

相關問題