Я играл с ArrayAdapters и достиг точки, когда я получаю разные результаты от двух почти идентичных комбинаций ArrayLists + ArrayAdapter.
Первая:
ArrayList объектов 'Restaurant', ArrayAdapter, который использует этот ArrayList, и 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 из объектов String, ArrayAdapter, которыйиспользует этот ArrayList и AutoCompleteTextView, который связывает этот ArrayAdatper.
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.Автозаполнение работает должным образом .... но я заметил кое-что, когда проверял значения во время отладки:
Фактические ArrayLists, модель (Restaurant) обновляются после добавления объекта в адаптер, но prevAddressList(Строка) нет.
Если я не установил AutoCompleteTextField пустым .... затем prevAddressList обновляется после добавления чего-либо во второй адаптер.
Уже пробовал использовать notifyDataSetChanged (), но это не имеет значения (и в любом случае он установлен на true для каждого адаптера по умолчанию.
Другое поведение, которое отличается между двумя адаптерами, заключается в том, что в первом (Restaurant) значения идут в поле mObjects, а во второмодин (String) вместо этого они собираются в mOriginalValues.
Я полностью растрепан.Единственное различие между этими двумя адаптерами состоит в том, что один тип «Ресторан», а другой тип «String».
Есть идеи?Может быть, я упускаю что-то очень очевидное?Дайте мне знать, если вам нужен полный код.
спасибо