2016-03-23 50 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,则此功能不可用。

相关问题