Android リストのコンテキストメニューからアイテムを取得するのとスクロールバーを大きくするのと
ListView がらみの備忘を2つほど。
1.スクロールバーを大きくする
下図の様に、リストビュー(リストアクティビティ) のアイテムが多いときなど、スクロールバーのハンドルが大きくなって、一気にスクロールできる様にするには、
Fast scroll enabled プロパティ を true に設定する
コードからは、
setFastScrollEnabled(boolean enabled)
にて設定。
2.リストビューのコンテキストメニューを選んだときに、選択されたアイテムを取得する
リストビューのアイテムが選択されたときに、アダプターからアイテムを取り出すのは
簡単。オーバーライドしたイベントハンドラに position が渡ってくるので、getImte(int position) すれば良い。
(以下の例は、ジェネリックスで継承したアダプターを利用 public static class WordAdapter extends ArrayAdapter<WordBook.Word>)
@Override protected void onListItemClick(ListView l, View v, int position, long id) { WordBook.Word word = adapter.getItem(position); speak(word); }
しかしながら、コンテキストメニューを表示させて、メニューが選択された時に呼び出されるイベントハンドラーには、position がない。。。
public boolean onContextItemSelected (MenuItem item)
以下の様に、MenuItem から、AdapterContextMenuInfo を取り出して、id を参照すると、行の位置を取得することができるので、後はそれをもって、アダプターの getImte(int position) をすれば良い。
@Override public boolean onContextItemSelected(MenuItem item) { AdapterContextMenuInfo info = (AdapterContextMenuInfo)item.getMenuInfo(); WordBook.Word word = null; try { word = adapter.getItem((int)info.id); } catch(Exception e){} switch(item.getItemId()) { case MENU_CONTEXT_SHARE: shareWord(word); break; case MENU_CONTEXT_SPEAK: speak(word); break; default: break; } return true; }