Android のドキュメントによるとregisterForContextMenu
、異なるビューに対して複数回呼び出すことができます。
特定のビューに表示されるコンテキスト メニューを登録します (複数のビューでコンテキスト メニューを表示できます)。
この機能を次のレイアウトに使用しようとしています。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/host"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:longClickable="true" >
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</ListView>
ソース コードregisterForContextMenu
では、ホストとリストの両方を呼び出します。残念ながら、このような登録は問題を引き起こします:を通じて要求されたメニュー情報onContextItemSelected(MenuItem item)
を常に取得する方法で。もちろん、このユース ケースではリスト ビュー アイテムに対してロング タッチが行われるため、通常、メニュー アイテムは null であってはなりません。ホスト レイアウトを削除すると、メニュー情報が に正しく提供されます。null
item.getMenuInfo()
registerForContextMenu
onContextItemSelected
画面上の任意の場所でのタッチに対して表示されるようにするために、コンテキストメニューのこの複数の登録が必要です(詳細は別の質問で見つけることができます -ここ)。簡単に言うと、コンテキスト メニューはアイテムに対して表示され、アイテムの外部に触れたときに表示されます。アイテムに対して呼び出された場合は、アイテムの位置を取得する必要があります。