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>)

  1. @Override
  2. protected void onListItemClick(ListView l, View v, int position, long id) {
  3. WordBook.Word word = adapter.getItem(position);
  4. speak(word);
  5. }

しかしながら、コンテキストメニューを表示させて、メニューが選択された時に呼び出されるイベントハンドラーには、position がない。。。

public boolean onContextItemSelected (MenuItem item)

context_item 

以下の様に、MenuItem から、AdapterContextMenuInfo を取り出して、id を参照すると、行の位置を取得することができるので、後はそれをもって、アダプターの getImte(int position) をすれば良い。

  1. @Override
  2. public boolean onContextItemSelected(MenuItem item) {
  3.  
  4. AdapterContextMenuInfo info = (AdapterContextMenuInfo)item.getMenuInfo();
  5. WordBook.Word word = null;
  6. try {
  7. word = adapter.getItem((int)info.id);
  8. } catch(Exception e){}
  9. switch(item.getItemId()) {
  10. case MENU_CONTEXT_SHARE:
  11. shareWord(word);
  12. break;
  13. case MENU_CONTEXT_SPEAK:
  14. speak(word);
  15. break;
  16. default:
  17. break;
  18. }
  19. return true;
  20. }

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

Follow me!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です