将项添加到ListAdapter会导致异常

时间:2010-04-21 17:52:49

标签: android exception listview

我正在尝试使用列表视图,当我将一个项添加到其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;
}

1 个答案:

答案 0 :(得分:1)

问题在于我是从UI线程外部调用notifyDataSetChanged。

这解决了问题。

runOnUiThread(new Runnable(){    public void run(){        tickerModel.notifyDataSetChanged();    } });

谢谢, 格里

相关问题