您的列表不更新的原因是,你是不是曾經將您的數據項的適配器。您只將它們添加到choicesArray
這是您傳遞給新的ArrayAdapter()構造函數的數組。
該構造函數不適配器綁定到數組,但基本上覆制到陣列的適配器(在你調用構造函數的時間)後到陣列的變更不會在一個ArrayAdapter中反映出來。
我喜歡這樣認爲ArrayAdapter <>與ArrayList <>基本上是一樣的,並且可以爲某些AdpaterView父項生成子視圖。您可以將它傳遞給array[]
以開始,它將使用該數組中的值進行初始化,但它不會將數組鏈接到適配器或ListView。在最初的構造函數調用之後,任何一個變化都不會反映在另一個變體中。
所以,你應該改變你的代碼看起來像這樣:
addButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
EditText editText = (EditText) findViewById(R.id.edit_choice);
String message = editText.getText().toString();
adapter.add(message);
//adapter.notifyDataSetChanged(); //<-- you might need to call this, but I think it might work without if you do it this way.
//listView.setAdapter(adapter); //<-- you shouldn't need to call this each time. Once at the begining is enough.
}
});
編輯:
改變你的ArrayAdapter的構造和刪除choiceArray參數,所以你應該會留下這樣的:
final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, android.R.id.text1);
之後,我認爲你應該很好去。本質上,問題在於,由於您傳遞的是數組,因爲數組的大小是固定的(您的長度爲1),所以不允許添加任何內容。如果你願意,我懷疑你可以使用ArrayList<String>
而不是String[]
,但對於你的情況,我認爲只要跳過這個參數並直接添加項目到你的適配器將會更容易,只要你需要添加新的。
什麼是變量'選擇'你似乎沒有在你發佈的代碼中聲明它。 – FoamyGuy 2013-03-06 20:11:54
道歉,我編輯它。這是一個類變量 – 2013-03-06 20:28:00
好吧,我編輯我的答案與您需要修復它的信息。我將再次編輯您的帖子以添加您移除的標籤。請讓他們有這個時候,使用特定的標籤保留本網站舉辦的,它給你一個更好的機會得到來自人的答案,因爲很多人「最喜歡」的標籤,他們在 – FoamyGuy 2013-03-06 21:57:05