如何求解java.lang.nosuchmethoderror:android.widget.abslistview.isitemchecked
-
25-10-2019 - |
题
我正在针对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框架已经 isItemChecked
上 ListView
.
但是,在API级别11的发布中,Google移动了 isItemChecked
至 AbsListView
, ,这是 ListView
. 。此更改并不能阻止现有代码(用于针对API级别11的编译)来编译API级别11,但生成的.class文件实际上在寻找 isItemChecked
上 AbsListView
, ,在API前11级设备上不存在。
在 API差异报告, ,据说:
boolean isItemChecked(int)
方法是在本地定义的,但现在是从AbsListView
.
这是一个危险的陷阱,因为根本无法在编译时检查兼容性。您必须记住将其施加为 ListView
并不是 AbsListView
. 。也许我们应该避免 AbsListView
Altogther。
不隶属于 StackOverflow