更改ArrayAdapter时,多久调用一次“notifyDataSetChanged()”

时间:2013-04-13 17:40:52

标签: android android-arrayadapter notifydatasetchanged

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);
}

现在我想更新自动填充提案列表。调用&#34; notifyDataSetChanged()&#34;是否足够/正确?完成所有添加操作后一次,或者我已经调用&#34; notifyDataSetChanged()&#34;在每个&#34; autoCompleteLib.add&#34;之后?

thx求助

2 个答案:

答案 0 :(得分:3)

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

这取决于你想要什么,但我建议你只打电话一次。如果您将拥有例如milion行,那么每次将新项目添加到Adapter时调用notify方法都会非常恶心。

答案 1 :(得分:3)

  

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

notifyDataSetChanged()告诉ListView(或GridView等)重绘整个ViewGroup,这可能很慢,只应在你想要看到每次更改时使用。

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