更新ListView时是否真的需要notifyDataSetChanged()

时间:2016-03-23 22:58:53

标签: android listview notifydatasetchanged

我有一个带适配器的ListView。我的ListViewItem上只有一个ImageView对象。当我更改ListViewItems中位图的内容时,我总是要调用adapter.notifyDataSetChanged()。否则,位图不会刷新。我已经在Listview中的每个ImageView上尝试了myImageView.Invalidate(),但这没有用。

更新ListViews的一些代码:

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

现在我的问题:是否有替代刷新ListViews(在我的情况下是位图的内容)或者我是否必须调用notifyDataSetChagend?谢谢!

1 个答案:

答案 0 :(得分:2)

适配器需要知道数据已更改才能刷新自身,因此必须这样做。问题是为什么你首先需要一个替代品!

但是,如果您需要它更高效,您可以使用RecyclerView.Adapter notifyItemChanged (int position)通知已更改的特定项目而不是整个项目,如果您仍在使用,则无法使用此项目的ListView。