Android中ArrayAdapters的奇怪行为

时间:2012-01-29 06:00:46

标签: android android-arrayadapter

我一直在玩ArrayAdapters,我已经达到了两个几乎相同的ArrayLists + ArrayAdapter组合得到不同结果的地步。

第一个:

'Restaurant'对象的ArrayList,使用此ArrayList的ArrayAdapter和绑定此ArrayAdapter的ListView。

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);
   ...
}    

第二个:

String对象的ArrayList,使用此ArrayList的ArrayAdapter和绑定此ArrayAdatper的AutoCompleteTextView。

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,model(Restaurant)在向适配器添加对象后会更新,但prevAddressList(String)不是。

除非,我将AutoCompleteTextField设置为空....然后,在向第二个适配器添加内容后,prevAddressList会更新。

已经尝试过使用notifyDataSetChanged(),但没有区别(默认情况下,默认情况下它在每个适配器上设置为true)。

两个适配器之间不同的其他行为是,在第一个(Restaurant)中,值将转到mObjects字段,而在第二个(String)中,它们将转到mOriginalValues。

我完全被踩了。这两个适配器之间的唯一区别是一个是“Restaurant”类型,另一个是“String”类型。

有什么想法吗?也许我错过了一些非常明显的东西?如果您需要完整的代码,请告诉我。

感谢

2 个答案:

答案 0 :(得分:0)

尝试将对象添加到列表中,然后在适配器上调用notifyDataSetChanged,而不是将其添加到适配器。适配器应该接收您的更改,您的课程列表将包含您刚刚添加的对象。

答案 1 :(得分:0)

对于任何从谷歌来这里的人:

Unable to modify ArrayAdapter in ListView: UnsupportedOperationException

这可能解释了这种行为,虽然我必须亲自测试。