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;
- }