2012-05-22 48 views
1

我試圖在刪除值後重新填充Spinner刪除值後重置微調器

目前該應用程序設置了一個帶有字符串值列表的Spinner,然後在使用該應用程序時,將這些值中的一些從ArrayAdaptor中刪除。然後在某個時候,Spinner的列表需要使用默認值列表進行重置。我當前的代碼只需創建一個新的ArrayAdaptor,並使用該Spinner最初設置了相同的字符串數組資源分配此到Spinner

Spinner mySpinner = (Spinner) findViewById(R.id.spinner); 
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, 
    android.R.layout.simple_list_item_1, 
    Static.itemList); 
arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
mySpinner.setAdapter(arrayAdapter); 

哪裏Static.itemlistString[]類型的數組。

從現在開始,項目從微調器中刪除,但使用上面的代碼不會將Spinner的值重置爲存儲在Static.itemList中的列表。在我看來,這應該可以工作,但是我們明顯錯過了一些事情。

完整的代碼可以在https://github.com/Uruwolf/VO-Miner/blob/master/src/com/uruwolf/vominer/VoMinerActivity.java找到問題的方法是從142行到147(我知道縮進是關閉的,在我的編輯器中看起來很好,我不確定它爲什麼不正確在github上) 。

這是我在StackOverflow上的第一個問題,所以請讓我知道如果我做錯了什麼。

+0

它https://github.com/Uruwolf/VO-Miner/blob/654b0bc40c4a1934e45bb7e13860b754a2d4594e/src/com/uruwolf/vominer/VoMinerActivity.java思考會是一個更好的鏈接代碼。 (鏈接到提交,而不是主人) – Uru

回答

3

更改列表後,您可能需要在適配器上調用notifyDataSetChanged()。

我認爲更好的方法是避免重新創建新的適配器,並在將數據重新添加到主列表後調用notifyDataSetChanged()。您實際上不需要重新創建適配器,因爲適配器中沒有任何內容在更改,除了適配器指向的數據列表之外。由於適配器只是指向一個列表並且不會消耗/包含列表本身,因此如果更改引用的列表,適配器應該能夠選擇更改(通知時)。

像這樣的東西可能工作

定義變量

Static.itemlist ... /*This list is static. Data never changes */ 
List<String> myListOfStrings; 
ArrayAdapter<String> arrayAdapter; 

初始化微調和適配器

Spinner mySpinner = (Spinner) findViewById(R.id.spinner); 

arrayAdapter = new ArrayAdapter<String>(this,  android.R.layout.simple_list_item_1,  myListOfStrings); 

arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

mySpinner.setAdapter(arrayAdapter); 

刷新適配器

myListOfStrings.clear(); 

myListOfStrings.addAll(Static.itemList); = /* Copy/Add the data from Static.itemList into myListOfStrings */ 

arrayAdapter.notifyDataSetChanged(); /* Inform the adapter we've changed items, which should force a refresh */ 
+0

非常感謝。這解決了我遇到的問題。 – Uru