更新 ListView 时是否真的需要 notifyDataSetChanged()
Is notifyDataSetChanged() really necessary when updating ListView
我有一个带适配器的 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();
}
});
现在我的问题是:是否有替代方法来刷新 ListView(在我的例子中是位图的内容),或者我是否必须调用 notifyDataSetChagend?谢谢!
适配器需要知道数据已更改才能刷新自身,因此有必要这样做。问题是为什么您首先需要一个替代方案!
但是,如果您需要它提高性能,您可以使用 RecyclerView.Adapter's notifyItemChanged (int position) 通知特定项目已更改而不是整个项目,如果您仍在使用 ListView,则此功能不可用。
我有一个带适配器的 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();
}
});
现在我的问题是:是否有替代方法来刷新 ListView(在我的例子中是位图的内容),或者我是否必须调用 notifyDataSetChagend?谢谢!
适配器需要知道数据已更改才能刷新自身,因此有必要这样做。问题是为什么您首先需要一个替代方案!
但是,如果您需要它提高性能,您可以使用 RecyclerView.Adapter's notifyItemChanged (int position) 通知特定项目已更改而不是整个项目,如果您仍在使用 ListView,则此功能不可用。