在适配器中使用addAll的NoSuchMethod?

Man*_*ser 25 java android

我有一个像这样声明的ArrayAdapter的子类

public class ShoppingCartAdapter extends ArrayAdapter<ShoppingCart> {
Run Code Online (Sandbox Code Playgroud)

一切都很好.现在突然(?)我在运行2.3.6的Nexus S或2.2抛出的模拟器上遇到此问题

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

但它仍然适用于例如我的Xoom 3.2.

我没有覆盖超级addAll方法,因为它在某些设备上工作,我不知道下一步该在哪里.任何提示?

更新:

我替换了adapter.addAll(newCarts)

for (ShoppingCart cart : newCarts) {
  adapter.add(cart);
}
Run Code Online (Sandbox Code Playgroud)

这很有效.我认为它与仿制药有关,但一直无法确定它.

gwv*_*eri 44

addAll(...)
Run Code Online (Sandbox Code Playgroud)

已从API 11(Android 3.0)开始添加.这里的文件.

  • 为什么编译器没有检测到这个?我有min sdk 7和这个方法的应用程序.这可以由编译器检测到 (17认同)
  • 指定"minSdkVersion"不会更改构建目标.如果你将*build target*更改为你想到的"min"版本,那么编译器会检测到类似的东西(如果你运行的是较新的构建目标,它就不能).请参阅此处的"选择平台版本和API级别":http://developer.android.com/guide/topics/manifest/uses-sdk-element.html. (3认同)

Nau*_*air 12

addAll(...)在较低的API级别中不可用.它在API 11及更高版本中添加.因此,使用add(...)来解决此问题,如下所示

    for (int i = 0; i < contents.size(); i++) {
        adapter.add(contents.get(i));
    }
Run Code Online (Sandbox Code Playgroud)

代替

    //adapter.addAll(contents); //do not use addAll(...)
Run Code Online (Sandbox Code Playgroud)

  • 在执行此操作之前,您可能希望在运行时检查构建版本,ala"在运行时检查系统版本":http://developer.android.com/training/basics/supporting-devices/platforms.html.(因为您不需要抛弃addAll并恢复为所有设备的丑陋手动循环,只需运行<HONEYCOMB.) (2认同)