我有一个使用数组适配器的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中的位置???这是否意味着我必须制作自己的自定义listadapter?如果我不调用theLocations.notifyDataSetChanged()一切都没问题但是没有更新...... :(
我应该注意,Location类中的toString()是覆盖以返回String名称;
发表评论后我尝试了这个:
public void onUIUpdate(Location l) {
locations.add(l);
//theLocations.notifyDataSetChanged();
WrapperListAdapter wr = (WrapperListAdapter)listView.getAdapter();
ArrayAdapter aa=(ArrayAdapter)wr.getWrappedAdapter();
aa.notifyDataSetChanged();
}
LOL在这里没有运气,是在黑暗中刺伤。如果我在ListView上使用addHeaderView,还要游荡?我不确定它是否会在将来使用addHeaderView使其不可变?
答案 0 :(得分:0)
我不会评论ListView设计,它非常难看,但我做listView.getAdapter()。getWrappedAdapter()。notifyDataSetChabged();它有效。