2012-01-29 69 views
2

ArrayAdapters我一直在玩弄ArrayAdapters,我已經在那裏我從兩個幾乎相同的ArrayList + ArrayAdapter組合得到不同的結果達到了一個點。奇怪的行爲與Android的

第一個:

「餐廳」對象的ArrayList,使用該ArrayList和結合這ArrayAdapter一個ListView一個ArrayAdapter。

private ArrayList<Restaurant> model = new ArrayList<Restaurant>(); 
private ArrayAdapter<Restaurant> restaurantAdapter = null; 
... 
public void onCreate(Bundle savedInstanceState){ 
    ... 
    restaurantAdapter = ArrayAdapter<Restaurant>(this, android.R.layout.simple_list_item_1, model); 
    ... 
    listView.setAdapter(restaurantAdapter); 
    ... 
}  

第二個:

字符串對象的ArrayList,使用該ArrayList和結合這ArrayAdatper一個AutoCompleteTextView一個ArrayAdapter。

private ArrayList<String> prevAddressList = new ArrayList<String>(); 
private ArrayAdapter<String> addListAdapter = null; 
... 
public void onCreate(Bundle savedInstanceState){ 
    ... 
    addListAdapter = ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, prevAdddressList); 
    ... 
    autoCompleteField.setAdapter(addListAdapter); 
    ... 
}  

我有一個保存按鈕,點擊之後,我創建的名稱和地址的餐廳對象,並將其添加到第一個適配器,另外,我想創建一個先前使用的地址的列表,以便他們在下一次輸入時會「自動完成」,因此我將文本添加到第二個適配器中。

...onSave = new View.OnClickListener(){ 
... 
restaurantAdapter.add(r); //r is a Restaurant object. 
addListAdapter.add(autoCompleteField.getText().toString()); 
... 
} 

現在,一切工作正常。我得到了ListView中顯示的餐廳。 AutoComplete正如預期的那樣工作......但我在調試時檢查了值時發現了一些問題:

將對象添加到適配器後,實際的ArrayLists,模型(餐廳)正在更新,但是prevAddressList(String ) 不是。

除非,我設置了AutoCompleteTextField空....然後,將prevAddressList被添加東西,第二個適配器後更新。

使用notifyDataSetChanged()已經嘗試過,但它沒有什麼區別(它被設置爲true,默認爲每適配器反正)。

兩個適配器之間的其他行爲有所不同,第一個(Restaurant)中的值將轉到mObjects字段,而第二個(String)中的值則轉到mOriginalValues。

我完全跺着腳。這兩個適配器唯一的區別在於一個是「餐廳」類型,另一個是「字符串」類型。

任何想法?也許我錯過了一些非常明顯的東西?讓我知道你是否需要完整的代碼。

感謝

回答

0

相反,它增加了適配器,嘗試添加對象到您的列表,然後在適配器上調用notifyDataSetChanged。適配器應該選擇你的更改,當然你的列表將包含你剛添加的對象。

+0

已經嘗試過。事實上,起初我是直接修改陣列,這就是我最初認爲會導致問題的原因。 我因此轉移到另一個話題,但肯定會再次討論這個在未來的解決方法是很容易的,但便於理解的Android是如何工作的我** **需要知道什麼WIS導致不一致的行爲(爲什麼分別存放在不同的領域中兩個適配器的值和/或當該值只是一個空串,等等)。 – jabruzzi 2012-02-08 08:14:51