Adsenseバナー

2010年12月29日水曜日

ListViewで独自の行レイアウトを使ったときのContextMenu表示

Androidでは一覧において、行に対するコンテキストメニュー(ポップアップメニュー)を表示させたい場合、その行を長押し(Long Click)する方法が標準的です。

で、プログラミングではどうやるのかは、ネットで探せば親切なサイトがたくさんあって、苦労せず実装できます。
…が、しかし、苦労しないはずが、なぜか苦労してしまったので、ハマったところのメモ。


ListViewで長押しによるメニュー表示を有効にする場合は、簡単に次のステップを踏めば良い。

  1. Activity#registerForContextMenu()でListViewのインスタンスを指定
  2. Activity#onCreateContextMenu()でメニュー生成
  3. Activity#onContextItemSelected()でメニュー選択時の動作を記述

で、その通りやったはずなんですが、長押ししてもActivity#onCreateContextMenu()が呼ばれない。
なんでだろうと四苦八苦しましたが、結論は次の1属性を行のレイアウトに指定していなかったため。

android:longClickable="true"

行のレイアウトは独自のものを定義して使用していますが、そのルートはRelativeLayoutにしました。
で、RelativeLayoutは長押しが、というかクリックがデフォルトで無効になっているので、いくら長押ししてもそのイベントが発生しなかったと。
上記の設定をしたら無事コンテキストメニューが呼ばれました。
わかっちゃえば何でもないんだけど、こういうところで引っかかっちゃうのが、自分のスキル不足なのか、Googleクオリティなのか…

1 件のコメント:

  1. こんにちは。

    自分も同じ所で、かなりハマりこみました。
    この記事見て、サクッと終わりました、感謝!

    返信削除