2012-05-26 79 views
0

我正在製作一個Android應用程序,我的實施adapter.add()似乎會使應用程序崩潰。我不得不使用Log標籤來發現我的代碼奇怪地陷入循環。這裏是代碼:爲什麼adapter.add()創建一個無限循環並崩潰?

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循環之前,所以我沒有理由讓應用程序崩潰。我是否正確使用適配器?請幫忙!

回答

1

您的問題缺少一些上下文。幸運的是,我知道您的適配器類型爲ArrayAdapter,並且正在使用cards進行初始化。當你的循環開始時,cards.size()是。但那麼你add東西,使cards.size()是。然後......我想你明白了。您可以通過適配器add或通過列表add向您的適配器/列表對添加內容。如果您將它添加到兩個,那麼您將它添加兩次。

這裏是ArrayAdapter::add代碼:

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

其中是您用於構建適配器非常相同的列表。 mObjects是它們的過濾版本。

+0

+1好扣除 – tibtof

+0

@tibtof:我在上一個問題中看到了他的完整代碼,並且已經指出他做錯了。 –

+0

你是說adapter.add(cards.get(i))添加到arraylist卡?那麼我是否需要while循環,或者在代碼之前增加卡時,適配器是否會增加? –