2010-04-21 89 views
1

我想要使用列表視圖,並且當我將項添加到其ListAdapter的ArrayList並調用notifyDataSetChanged時,它會引發異常。調用下面的addItem例程將引發異常。將項添加到ListAdapter導致異常

消息稱源未找到,然後該: //從DataSetObservable.java(1.5版本:49.0,超級位)編譯 //簽名:Landroid /數據庫/可觀察; 公共類android.database.DataSetObservable延伸android.database.Observable {

//方法描述符#8()V //堆棧:3,當地人:1 公共DataSetObservable(); 0 aload_0 [此] 1 invokespecial android.database.Observable()[1] 4新了java.lang.RuntimeException [2] 7 DUP 8 LDC [3] 10 invokespecial了java.lang.RuntimeException(java中。行數: 行數: [pc:0,line:5] 局部變量表: [pc:0,pc:14] local:this index: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

嘗試傳遞'tickerList'作爲第二個參數爲'mInflater.inflate()'。 這是一個非常奇怪的例外。你可以嘗試用四個空格縮進來粘貼它,這樣可以更容易地閱讀它嗎? – synic 2010-04-21 18:00:45

+1

我不相信這是一個堆棧跟蹤。這看起來有點像Eclipse窗口,顯示暫停的線程。嘗試在Eclipse中使用'adb logcat',DDMS或DDMS透視圖來獲取異常信息。 – CommonsWare 2010-04-21 18:28:36

+0

爲什麼使用BaseAdapter而不是ArrayAdapter? – Macarse 2010-04-21 22:59:24

回答

1

問題是我從UI線程外部調用notifyDataSetChanged。

這解決了這個問題。

runOnUiThread(新的Runnable(){ 公共無效的run(){ tickerModel.notifyDataSetChanged();} });

謝謝, 格里

相關問題