我正在尝试使用列表视图,当我将一个项添加到其ListAdapter的ArrayList并调用notifyDataSetChanged时,它会抛出异常。调用下面的addItem例程会抛出异常。
消息显示Source not Found,然后是: //从DataSetObservable.java编译(版本1.5:49.0,超级位) //签名:Landroid /数据库/可观察; public class android.database.DataSetObservable扩展了android.database.Observable {
//方法描述符#8()V //堆栈:3,本地人:1 public DataSetObservable(); 0 aload_0 [this] 1 invokespecial android.database.Observable()[1] 4个新的java.lang.RuntimeException [2] 7重复 8 ldc [3] 10 invokespecial java.lang.RuntimeException(java.lang.String)[4] 13岁 行号: [pc:0,行:5] 局部变量表: [pc:0,pc:14] local:这个索引:0类型:android.database.DataSetObservable
我的初始化代码:
tickerList = (ListView)findViewById(R.id.ListView01);
tickerModel = new StockAdapter(stocks);
tickerList.setAdapter(tickerModel);
我已经包含了我的自定义适配器类。 (从在线示例修改)
private class StockAdapter extends BaseAdapter {
private ArrayList <Stockdata>mData = new ArrayList<Stockdata>();
private LayoutInflater mInflater;
public StockAdapter(ArrayList<Stockdata>rows) {
mInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mData = rows;
}
public void addItem(Stockdata item) {
mData.add(item);
notifyDataSetChanged();
}
@Override
public int getCount() {
return mData.size();
}
@Override
public Stockdata getItem(int position) {
return mData.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
System.out.println("getView " + position + " " + convertView);
ViewHolder holder = null;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.row, null);
holder = new ViewHolder();
holder.textView = (TextView)convertView.findViewById(R.id.SYMBOL_CELL);
convertView.setTag(holder);
} else {
holder = (ViewHolder)convertView.getTag();
}
holder.textView.setText(mData.get(position).getSymbol());
return convertView;
}
}
public static class ViewHolder {
public TextView textView;
}
答案 0 :(得分:1)
问题在于我是从UI线程外部调用notifyDataSetChanged。
这解决了问题。
runOnUiThread(new Runnable(){ public void run(){ tickerModel.notifyDataSetChanged(); } });
谢谢, 格里