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。
我完全跺着腳。這兩個適配器唯一的區別在於一個是「餐廳」類型,另一個是「字符串」類型。
任何想法?也許我錯過了一些非常明顯的東西?讓我知道你是否需要完整的代碼。
感謝
已經嘗試過。事實上,起初我是直接修改陣列,這就是我最初認爲會導致問題的原因。 我因此轉移到另一個話題,但肯定會再次討論這個在未來的解決方法是很容易的,但便於理解的Android是如何工作的我** **需要知道什麼WIS導致不一致的行爲(爲什麼分別存放在不同的領域中兩個適配器的值和/或當該值只是一個空串,等等)。 – jabruzzi 2012-02-08 08:14:51