0

Androidアプリを作成していますが、の実装でadapter.add()アプリがクラッシュするようです。Logタグを使用して、コードが奇妙なことにループに陥っていることを確認する必要がありました。コードは次のとおりです。

int i =0;
if(cards.size()>0){
    Log.i("KOOL","Checked arraylist size =" + cards.size());
    while(i < cards.size()){
        Log.i("KOOL","Inside while loop");
        adapter.add(cards.get(i));
        i++;
    }
    Log.i("KOOL","Added data to adapter");
    adapter.notifyDataSetChanged();
    Log.i("KOOL","Finished OnActivityResult");
}

アプリはログタグ「Insidewhileloop」に到達し、アプリがクラッシュするまでそれを繰り返します。cards.size()whileループの直前は2であることがわかっているので、アプリがクラッシュする理由はわかりません。アダプターを正しく使用していますか?助けてください!

4

1 に答える 1

1

あなたの質問にはいくつかの文脈が欠けています。幸いなことに、アダプタはタイプArrayAdapterであり、で初期化されていることを知っていますcards。ループが開始するとき、cards.size()2です。しかし、あなたはそれにadd何かをして、 3cards.size()になります。そして...私はあなたがポイントを得ると思います。アダプタまたはリストを介して、アダプタ/リストのペアに何かを追加します。両方に追加すると、2回追加されます。addadd

のコードは次のArrayAdapter::addとおりです。

public void add(T object) {
    synchronized (mLock) {
        if (mOriginalValues != null) {
            mOriginalValues.add(object);
        } else {
            mObjects.add(object);
        }
    }
    if (mNotifyOnChange) notifyDataSetChanged();
}

ここmOriginalValuesで、アダプターの作成に使用したものとまったく同じリストがあります。mObjectsそれらのフィルタリングされたバージョンです。

于 2012-05-26T22:47:15.900 に答える