У меня есть этот ListView, который использует адаптер массива:
//global
ArrayList<Location> locations=new ArrayList<Location>(); //array list of location objects
ArrayAdapter<Location> theLocations;
ListView listView;
, затем в onCreateView моего фрагмента:
theLocations = new ArrayAdapter<Location>(mContext,
R.layout.location_row, locations);
listView.setAdapter(theLocations);
Это работает довольно хорошо, я думаю, хотя, если я пытаюсьчтобы обновить этот адаптер, он выходит из себя ...
//in my fragment, another dialog makes this call here to update the list.
public void onUIUpdate(Location l) { //listener call back when dialog "ok" clicked
locations.add(l); //it is okay with this.
theLocations.notifyDataSetChanged(); //dies
}
Он умирает с ошибкой:
07-23 08:03:28.655: ERROR/AndroidRuntime(509): java.lang.IllegalStateException: ArrayAdapter requires the resource ID to be a TextView
означает, что ему не нравится Местоположениев ArrayAdapter ???Значит ли это, что я должен сделать свой собственный нестандартный список?Если я не вызываю theLocations.notifyDataSetChanged (), то все в порядке, но тогда ничего не обновляется ...: (
Я должен отметить, что toString () в классе Location переопределяется, чтобы возвращать имя String;
после комментария я попробовал это:
public void onUIUpdate(Location l) {
locations.add(l);
//theLocations.notifyDataSetChanged();
WrapperListAdapter wr = (WrapperListAdapter)listView.getAdapter();
ArrayAdapter aa=(ArrayAdapter)wr.getWrappedAdapter();
aa.notifyDataSetChanged();
}
LOL не повезло, был удар в темноте. Также блуждал, если его addHeaderView я использовал на ListView? Я не уверен, еслиэто делает его неизменным в будущем, используя addHeaderView?