0

onei 有一个 ArrayAdapter,它实现了 EditText 字段的自动完成建议列表。

AutoCompleteTextView ediFrom = (AutoCompleteTextView) findViewById(R.id.ediFrom);   
ArrayList<String> autoCompleteLib = new ArrayList<String>();
autoCompleteFromAdapter = new AutoCompleteAdapter(this, android.R.layout.simple_dropdown_item_1line, autoCompleteLib);
ediFrom.setAdapter(autoCompleteFromAdapter);

在 TimerTask (所以是后台线程)运行时,我将元素添加到此列表中:

synchronized (lock)
{
autoCompleteLib.add(newAddress);
}

现在我想更新自动完成提案列表。在所有添加操作完成后调用“notifyDataSetChanged()”是否足够/正确,或者我是否在每个“autoCompleteLib.add”之后调用“notifyDataSetChanged()”?

谢谢你的帮助

4

2 回答 2

3

如果要为添加的每一行更新适配器,请为添加notifyDataSetChanged()的每一行调用。如果没有,请notifyDataSetChanged()在工作完成后致电。

这取决于你想要什么,但我建议你只调用一次。如果您将有例如百万行,那么每次将新项目添加到适配器时调用 notify 方法是很恶心的。

于 2013-04-13T17:43:44.297 回答
3

在所有添加操作完成后调用“notifyDataSetChanged()”是否足够/正确,或者我是否在每个“autoCompleteLib.add”之后调用“notifyDataSetChanged()”?

notifyDataSetChanged()告诉 ListView(或 GridView 等)重绘整个 ViewGroup,这可能会很慢,并且只应在您想要实际查看每个更改时使用。

如果您只是批量添加一堆项目,我建议您在完成对数据集的更改后调用一次,没有理由在后台调用notifyDataSetChanged()每个更改。

于 2013-04-13T17:43:54.473 回答