2011-12-19 30 views
25

我有一個ArrayAdapter的一個子類,聲明如下在適配器中使用addAll的NoSuchMethod?

public class ShoppingCartAdapter extends ArrayAdapter<ShoppingCart> { 

,一切都已經正常工作。現在突然(?)我對我的Nexus S的這個問題,運行2.3.6或2.2的模擬器拋出

12-19 14:33:36.136: ERROR/AndroidRuntime(27326): FATAL EXCEPTION: main 
     java.lang.NoSuchMethodError: com.somewhere.mobile.fragment.ShoppingCartListFragment$ShoppingCartAdapter.addAll 

但它仍然適用於例如就好我的Xoom與3.2。

我不重寫超級addAll方法,因爲它在某些設備上工作,我不確定接下來要看哪裏。任何提示?

UPDATE:

我換成adapter.addAll(newCarts)與

for (ShoppingCart cart : newCarts) { 
    adapter.add(cart); 
} 

和工程。我認爲這與泛型有關,但一直未能確定。

回答

44
addAll(...) 

已從API 11(Android 3.0)開始添加。這裏的doc.

+0

衛生署來解決這個問題......甚至沒有檢查,由於我使用它的ArrayList只是在等優良地方。傻我。謝謝 –

+0

沒問題的人!該方法非常有用,它只是從Android 3.0開始添加! – gwa

+1

那麼老版本的android有什麼解決方案? – Emmy

12

addAll(...)在較低的API級別不可用。它添加在API 11及更高版本中。因此,使用添加(...)如下

for (int i = 0; i < contents.size(); i++) { 
     adapter.add(contents.get(i)); 
    } 

,而不是

//adapter.addAll(contents); //do not use addAll(...) 
+2

您可能希望在運行時檢查構建版本,然後執行「在運行時檢查系統版本」:http://developer.android.com/training/basics/supporting-devices/platforms.html。 (因爲你不需要丟棄addAll並且恢復到所有設備的醜陋手動循環,只是那些運行

+0

IMO檢查構建是醜陋的 – Luke