Добавление элемента в ListAdapter вызывает исключение - PullRequest
2 голосов
/ 21 апреля 2010

Я пытаюсь использовать представление списка, и когда я добавляю элемент в ArrayList его ListAdapter и вызываю notifyDataSetChanged, он вызывает исключение.Вызов нижеприведенной процедуры addItem вызовет исключение.

В сообщении говорится, что источник не найден, а затем это: // скомпилировано из DataSetObservable.java (версия 1.5: 49.0, супер-бит) // Подпись: Landroid / database/ Наблюдаемое;открытый класс android.database.DataSetObservable extends android.database.Observable {

// Дескриптор метода # 8 () V // Стек: 3, Locals: 1 public DataSetObservable ();0 aload_0 [this] 1 invokespecial android.database.Observable () [1] 4 новых java.lang.RuntimeException [2] 7 dup 8 ldc [3] 10 invokespecial java.lang.RuntimeException (java.lang.String) [4] 13 athrow Номера строк: [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 Ответ

1 голос
/ 22 апреля 2010

Проблема заключалась в том, что я вызывал notifyDataSetChanged извне потока пользовательского интерфейса.

Это решило проблему.

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

Спасибо, Gerry

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...