在Android中更新字符串数组并随后更新ListView

时间:2014-12-04 01:01:38

标签: android listview android-listview

我正在尝试更新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

1 个答案:

答案 0 :(得分:2)

我认为您需要更直接地修改适配器。当我浏览使用String数组构造ArrayAdapter的Android代码时,它首先从String []创建一个ArrayList,然后从ArrayList生成ArrayAdapter。虽然源确实似乎指向ArrayList然后指向数组,但期望ArrayAdapter意识到您已经在其内部修改了String []似乎是一个冒险的命题。有趣的是,调用notifyDataSetChanged可以在一个设备上运行,而不是在另一个设备上运行。但我认为更好的方法是删除然后从适配器添加字符串。这样适配器就会知道发生了什么事。

adapter.remove(adapter.get(1));
adapter.insert("new string", 1);