当我尝试更新ArrayAdapter时,ListView吓坏了,是标题?

时间:2011-07-23 08:05:48

标签: android android-listview

我有一个使用数组适配器的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使其不可变?

1 个答案:

答案 0 :(得分:0)

我不会评论ListView设计,它非常难看,但我做listView.getAdapter()。getWrappedAdapter()。notifyDataSetChabged();它有效。