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");
}

应用程序到达日志标签“内部 while 循环”并重复它,直到应用程序崩溃。我知道cards.size()在 while 循环之前是 2,所以我认为应用程序没有崩溃的原因。我是否正确使用了适配器?请帮忙!

4

1 回答 1

1

您的问题缺少一些上下文。幸运的是,我知道您的适配器是 typeArrayAdapter并且它被初始化为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是它们的过滤版本。

于 2012-05-26T22:47:15.900 回答