java.lang.nosuchmethoderrorを解く方法:android.widget.abslistview.isitemchecked

StackOverflow https://stackoverflow.com/questions/7306430

  •  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はの定義を移動しました isItemCheckedAbsListView, 、これはスーパークラスです ListView. 。この変更は、APIレベル11に対してコンパイルする既存のコード(Pre-APIレベル11に対するコンパイル用)を防ぐことはできませんが、生成された.classファイルは実際に探しています isItemChecked の上 AbsListView, 、API前のレベル11デバイスには存在しません。

APIの違いレポート, 、それは述べられています:

boolean isItemChecked(int) 方法はローカルで定義されていましたが、今ではから継承されています AbsListView.

これは危険な落とし穴です。互換性をコンパイル時にまったく確認できないからです。キャストすることを忘れないでください ListView そしてそうではありません AbsListView. 。多分私たちは避けるべきです AbsListView altogther。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top