我正在制作一款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,所以我认为没有理由让应用程序崩溃。我正确使用适配器吗?请帮忙!
答案 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
是他们的过滤版本。