2014-12-04 65 views
0

我想更新ListView中的字符串,並有更新反映在ListView。這裏是發生了什麼事情的基礎:更新字符串數組與Android的後續更新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

回答

2

我認爲你需要更直接的修改適配器。當我瀏覽使用String數組構造ArrayAdapter的Android代碼時,它首先從您的String []創建一個ArrayList,然後從ArrayList創建ArrayAdapter。儘管源似乎指向了ArrayList,然後是數組,但是期望ArrayAdapter知道你已經修改了其中的深層String [],這似乎是一個冒險的主張。有趣的是,調用notifyDataSetChanged可以在一個設備上工作,而不是另一個。但我認爲更好的方法是從適配器中刪除並添加字符串。這樣適配器就會知道發生了什麼事情。

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

嗨布魯斯 - 實際上,我甚至不打擾在第一個設備上調用.notifyDataSetChanged。我只是更新字符串數組,其他所有事情都會自動發生。在我擁有的所有測試手機(各種Android版本)以及我嘗試過的模擬器中,功能一直保持一致,而不是在Nexus 7上。 – Chance 2014-12-04 16:00:31