Android リストのコンテキストメニューからアイテムを取得するのとスクロールバーを大きくするのと

ListView がらみの備忘を2つほど。

1.スクロールバーを大きくする

下図の様に、リストビュー(リストアクティビティ) のアイテムが多いときなど、スクロールバーのハンドルが大きくなって、一気にスクロールできる様にするには、

fastscrollbar01

Fast scroll enabled プロパティ を true に設定する

fastscrollbar02

コードからは、

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)

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

Android で英単語を学習するなら英単語ロイド!