ユーザーがメニューボタンを押したときにコンテキストメニューを表示したい。次のコードスニペットを見つけて使用しました。
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
if((keyCode == KeyEvent.KEYCODE_MENU) && event.getRepeatCount() == 0)
{
ImageView v = (ImageView)findViewById(IMAGE_ID);
Log.v("me", "menu " + v.toString());
openContextMenu(v);
}
return true; // return false; doesn't work either
}
もちろん、ビューはコンテキストメニューに登録されており、長時間タッチしても問題なく機能します。問題は、上記のコードが時々しか機能しないことです。つまり、メニューボタンを押すとログメッセージが常に表示されますが、ごくまれにコンテキストメニューが表示されます。okと表示される唯一のケースは、アプリケーションの開始直後です。言い換えれば、最初の試みだけが成功し、他のすべての試みは時折機能しますが、ほとんどは機能しません。ビューは変更されず、常に検出されます。そうしないと、ログ行でこのような問題や例外が発生する可能性があります。