为什么adapter.add()创建一个无限循环并崩溃?

时间:2012-05-26 22:42:29

标签: java android loops adapter android-arrayadapter

我正在制作一款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");
}

应用程序到达Log标记“Inside while loop”并重复它直到应用程序崩溃。我知道cards.size()在while循环之前是2,所以我认为没有理由让应用程序崩溃。我正确使用适配器吗?请帮忙!

1 个答案:

答案 0 :(得分:1)

您的问题缺少某些背景信息。幸运的是,我知道您的适配器属于ArrayAdapter类型,并且正在使用cards进行初始化。当您的循环开始时,cards.size() 2 。但是,你add有一些东西,使cards.size() 3 。然后......我想你明白了。您可以通过适配器add或列表add向适配器/列表对添加内容。如果将它添加到两者,则将其添加两次。

以下是ArrayAdapter::add的代码:

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

其中mOriginalValues与用于构造适配器的列表完全相同。 mObjects是他们的过滤版本。