我正在针对API级别11(3.0)编辑一个Android项目,我有此代码:

if (parent instanceof AbsListView) {
    checked = ((AbsListView)parent).isItemChecked(position);
}

当我以3.0 pre-3.0(低于API级别11)设备运行此错误时,我会收到此错误:

java.lang.NoSuchMethodError: android.widget.AbsListView.isItemChecked

ABSLISTVIEW文档, isItemChecked 说为具有API 1级兼容性,那么为什么要获得错误?

有帮助吗?

解决方案

显然这就是发生的事情:

由于API 1级,Android框架已经 isItemCheckedListView.

但是,在API级别11的发布中,Google移动了 isItemCheckedAbsListView, ,这是 ListView. 。此更改并不能阻止现有代码(用于针对API级别11的编译)来编译API级别11,但生成的.class文件实际上在寻找 isItemCheckedAbsListView, ,在API前11级设备上不存在。

API差异报告, ,据说:

boolean isItemChecked(int) 方法是在本地定义的,但现在是从 AbsListView.

这是一个危险的陷阱,因为根本无法在编译时检查兼容性。您必须记住将其施加为 ListView 并不是 AbsListView. 。也许我们应该避免 AbsListView Altogther。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top