gpt4 book ai didi

android - 更新 CheckBox 项的 ListView 时,是更新单个 View 更好,还是更新 notifyDataSetChanged() 和 invalidateViews()?

转载 作者:行者123 更新时间:2023-11-29 15:58:03 25 4
gpt4 key购买 nike

这两种方法都有效,但哪一种更好?

更新个人观点:

public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
MyObject item = (MyObject) adapterView.getItemAtPosition(i);
boolean isChecked = item.isChecked();
item.setChecked(!isChecked);
((CheckBox)view.findViewById(R.id.checkBox)).setChecked(!isChecked);
}

更新所有 View :

public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
MyObject item = (MyObject) adapterView.getItemAtPosition(i);
item.setChecked(!item.isChecked());
adapter.notifyDataSetChanged();
getListView().invalidateViews();
}

最佳答案

更新个人 View 不好,因为findViewById需要很长时间(与其他方法相比)来执行,因为在某些情况下您想要更新很多列表项(比如 20 个项目)。您不会想一件一件地更新您的项目 - 这会花费大量时间和资源。

现在,看看更新所有项目时的代码:

public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
MyObject item = (MyObject) adapterView.getItemAtPosition(i);
item.setChecked(!item.isChecked());
adapter.notifyDataSetChanged();
getListView().invalidateViews(); //you can remove this line, read my explanation below
}

你打给了notifyDataSetChangedinvalidateViews ,这对你来说是一种浪费。为什么?

notifyDataSetChanged 将刷新 listview如果某项的值/数据 已更改。

示例:checkbox's值(value)改变了 - 就像你的情况一样。

与此同时,invalidateViews 将刷新 listview如果某个项目的属性 已更改。

示例:textview's颜色或文字大小已更改。

因此,在您的情况下,无需调用 getListView().invalidateViews();因为没有更改任何项目的属性,所以唯一更改的是项目的值/数据。

按要求更新:

这是一个您应该(并且只需要)调用 invalidateViews 的示例:

public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
MyObject item = (MyObject) adapterView.getItemAtPosition(i); //lets say item is TextView
item.setTextColor(Color.RED);
item.setTextSize(2);
item.setBackgroundColor(Color.BLUE);
getListView().invalidateViews();
}

因为 setTextSize , setBackgroundColor , 和 setTextColor只需更改属性,而不是值/数据。

关于android - 更新 CheckBox 项的 ListView 时,是更新单个 View 更好,还是更新 notifyDataSetChanged() 和 invalidateViews()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26783122/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com