【发布时间】:2011-02-10 17:37:43
【问题描述】:
我正在尝试使用列表视图,当我将一个项目添加到其 ListAdapter 的 ArrayList 并调用 notifyDataSetChanged 时,它会引发异常。调用下面的 addItem 例程会抛出异常。
消息显示未找到源,然后是: // 编译自 DataSetObservable.java(版本 1.5 : 49.0,超级位) // 签名:Landroid/database/Observable; 公共类 android.database.DataSetObservable 扩展 android.database.Observable {
// 方法描述符#8 ()V // 堆栈:3,本地:1 公共 DataSetObservable(); 0 aload_0 [这个] 1 调用特殊的 android.database.Observable() [1] 4 新的 java.lang.RuntimeException [2] 7重复 8 最不发达国家 [3] 10 调用特殊 java.lang.RuntimeException(java.lang.String) [4] 13 投掷 行号: [个人电脑:0,行:5] 局部变量表: [pc: 0, pc: 14] local: this index: 0 type: 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;
}
【问题讨论】:
-
尝试将
tickerList作为第二个参数传递给mInflater.inflate()。这是一个非常奇怪的例外。您可以尝试粘贴四个空格缩进,以便更容易阅读吗? -
我不相信这是一个堆栈跟踪。这看起来有点像显示已停止线程的 Eclipse 窗口。尝试在 Eclipse 中使用
adb logcat、DDMS 或 DDMS 透视图来获取异常信息。 -
为什么使用 BaseAdapter 而不是 ArrayAdapter?
标签: android exception listview