2015年5月31日日曜日

[android]AdapterView.OnItemClickListener#onItemClickのpositionについて


listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
  @Override
  public void onItemClick(AdapterView parent, View view, int position, long id) {
    // positionでitemを取得する★
  }
});

「// positionでitemを取得する★」のところで、ArrayAdapterの生成のときに渡したListインスタンスからList#getでItemを取得するようなコードを書いていました。よく。。。

ある日これではだめなことがわかりました。
listView.addHeaderView(header, null, false);
上にくっつきすぎている気がして、ヘッダーを追加したんです。
すると、+1された位置のものが返されるようになって、Listインスタンスから取得しているものだから最後尾のアイテムを触るとArrayIndexOutOfBoundsExceptionが発生するようになりました……

http://stackoverflow.com/questions/11106397/listview-addheaderview-causes-position-to-increase-by-one
に答えがありました。
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView parent, View view, int position, long id) {
        Klass item = (Klass)(parent.getItemAtPosition(position));
        // Klassは任意のクラス
}
});

こちらとか2011年10月4日から上のようになっています。
先人のサンプルをよく研究することが大事だとおもいました。

0 件のコメント:

コメントを投稿