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求助
答案 0 :(得分:3)
如果要为添加的每一行更新Adapter,请为添加的每一行调用notifyDataSetChanged()
。如果没有,请在工作完成后致电notifyDataSetChanged()
。
这取决于你想要什么,但我建议你只打电话一次。如果您将拥有例如milion行,那么每次将新项目添加到Adapter时调用notify方法都会非常恶心。
答案 1 :(得分:3)
在所有添加操作完成后调用“notifyDataSetChanged()”一次是否足够/正确,或者在每次“autoCompleteLib.add”之后调用“notifyDataSetChanged()”?
notifyDataSetChanged()
告诉ListView(或GridView等)重绘整个ViewGroup,这可能很慢,只应在你想要看到每次更改时使用。
如果您只是批量添加一堆项目,我建议您在完成对数据集的更改后调用一次,没有理由在每个更改后调用notifyDataSetChanged()
。< / p>