2011-12-19 8 views
25

que tienen una subclase de una ArrayAdapter declarada como estoNoSuchMethod with addAll in Adapter?

public class ShoppingCartAdapter extends ArrayAdapter<ShoppingCart> { 

y todo ha estado trabajando muy bien. Ahora, de repente (?) Tengo problemas con esto en mi Nexus S ejecutan 2.3.6 o un emulador con 2,2 lanzando

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

sin embargo, todavía funciona muy bien en, por ejemplo, mi Xoom con 3.2.

No estoy anulando los métodos super addAll y dado que funciona en algún dispositivo, no estoy seguro de dónde mirar a continuación. ¿Algún consejo?

ACTUALIZACIÓN:

que sustituyen adapter.addAll (newCarts) con

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

y que funciona. Supongo que tiene algo que ver con los genéricos, pero aún no han podido bloquearlo.

Respuesta

44
addAll(...) 

ha sido añadido a partir de API 11 (Android 3.0). Aquí, el doc.

+0

Doh ... ni siquiera comprobar que desde que estoy usando para ArrayLists muy bien en otra lugares. Tonto de mí. Gracias –

+0

No hay problema, hombre! Ese método es tan útil que apesta que acaban de agregar solo a partir de Android 3.0. – gwa

+1

entonces, ¿cuál es la solución para la versión anterior de Android? – Emmy

12

addAll (...) no está disponible en niveles inferiores de API. Se agrega en API 11 y superior. Así que utilice add (...) para solucionar este problema de la siguiente manera

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

en lugar de

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

Es posible que desee comprobar la versión de compilación en tiempo de ejecución antes de hacerlo, ala "Comprobar la versión del sistema en tiempo de ejecución": http://developer.android.com/training/basics/supporting-devices/platforms.html. (Debido a que no es necesario tirar addAll y volver a un feo bucle manual para TODOS los dispositivos, solo aquellos que ejecutan

+0

IMO que verifica la compilación es más feo – Luke

Cuestiones relacionadas