A Day In The Life

とあるプログラマの備忘録

getListView().getSelectedItem()メソッドがおかしい

Android SDKをM5にアップグレードしてからListActivityクラスのgetListView().getSelectedItem()メソッドがどうもおかしいです。

現象:

onListItemClickイベントでgetListView().getSelectedItem()を呼ぶと毎回nullが返ってくる。

他のイベントから呼ばれた場合は問題なく動く

うまく動くアクティビティとうまく動かないアクティビティがある。

対策:

getListView().getSelectedItem()メソッドを使わずにgetListView().getAdapter().getItemメソッドを使う。

例えばこんな感じ

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
  super.onListItemClick(l, v, position, id);
  getListView().getAdapter().getItem(position);
  :
}

getListView().getSelectedItemPosition()メソッドの戻りが-1なのが原因ぽいです。

なぜ-1になるのかは不明です。

今まで普通に動いてたのに...。



2月22日追記:

エミュレータのボタン操作でリストを選択した場合は正常に動きますが、マウスを使ってリストを直接選択するとgetSelectedItemPosition()からの戻りが-1になります。

onListItemClickイベントで以下のように実装することで回避可能です。

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
  setSelection(position);
  :
}

実機のことを考えるとマウスで直接操作するのはやめたほうがいいかもしれません。