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以前(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に対してコンパイルする既存のコード(Pre-APIレベル11に対するコンパイル用)を防ぐことはできませんが、生成された.classファイルは実際に探しています isItemChecked
の上 AbsListView
, 、API前のレベル11デバイスには存在しません。
に APIの違いレポート, 、それは述べられています:
boolean isItemChecked(int)
方法はローカルで定義されていましたが、今ではから継承されていますAbsListView
.
これは危険な落とし穴です。互換性をコンパイル時にまったく確認できないからです。キャストすることを忘れないでください ListView
そしてそうではありません AbsListView
. 。多分私たちは避けるべきです AbsListView
altogther。
所属していません StackOverflow