0

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 であってはなりません。ホスト レイアウトを削除すると、メニュー情報が に正しく提供されます。nullitem.getMenuInfo()registerForContextMenuonContextItemSelected

画面上の任意の場所でのタッチに対して表示されるようにするために、コンテキストメニューのこの複数の登録が必要です(詳細は別の質問で見つけることができます -ここ)。簡単に言うと、コンテキスト メニューはアイテムに対して表示され、アイテムの外部に触れたときに表示されます。アイテムに対して呼び出された場合は、アイテムの位置を取得する必要があります。

4

1 に答える 1

1

複数の registerForContextMenu を使用しているからではなく、他のビューを含むビューに 1 つを設定したためです。そのため、それらはすべて、リストではなくホストからのものとして登録されます。

また、通常のビューには追加のメニュー情報はありません。

ホストのフォーカスをオフにして、ホストがリストに落ちるようにしてください。ホストでも機能するはずですが、リストの前にフォーカスを取得することはできません。

于 2012-05-06T18:38:00.177 に答える