我正在尝试更新ListView
中的字符串,并将更新反映在ListView
中。以下是正在进行的基础知识:
testStrings = {"String", "String", String"};
ListView l = (ListView) findViewById( R.id.listView1 );
ArrayAdapter<String> adapter = new ArrayAdapter<String> (this, android.R.layout.simple_list_item_1, testStrings);
l.setAdapter(adapter);
稍后,testStrings
更新如下:
testStrings[1] = "new string";
注意,只是文本正在改变,而不是String数组的基数。
在搭载Android 4.3的三星Galaxy Nexus上,ListView
中的文字按预期更新,无需额外调用适配器。
在运行Android 4.4.2的Google Nexus 7上,没有任何反应。在Nexus 7上,我尝试在适配器上调用notifyDataSetChanged();
,但这也没有做任何事情。
我已经看到一些关于ListView
没有更新的问题,但这些例子似乎做的比我想做的更复杂。为什么一台设备工作正常,而另一台设备却没有?如何正确更新Nexus 7上的ListView
?
答案 0 :(得分:2)
我认为您需要更直接地修改适配器。当我浏览使用String数组构造ArrayAdapter的Android代码时,它首先从String []创建一个ArrayList,然后从ArrayList生成ArrayAdapter。虽然源确实似乎指向ArrayList然后指向数组,但期望ArrayAdapter意识到您已经在其内部修改了String []似乎是一个冒险的命题。有趣的是,调用notifyDataSetChanged可以在一个设备上运行,而不是在另一个设备上运行。但我认为更好的方法是删除然后从适配器添加字符串。这样适配器就会知道发生了什么事。
adapter.remove(adapter.get(1));
adapter.insert("new string", 1);