6

アプリケーションにこのPopupMenuがあり、いつ閉じられるか知りたいです。API14 +では、。を使用して却下リスナーを追加すると、これは簡単setOnDismissListener()です。ただし、PopupMenuがAPI11 +からいつ閉じられるかを知る必要があるため、リスナーを使用できず、リスナーの代替が必要です。

これは私がすでに試しました:

  • PopupMenuのメソッドをオーバーライドしますが、dismiss()閉じたときに呼び出されません。
  • を使用しますがPopupMenu.OnMenuItemClickListener、ユーザーがメニューの外側をクリック(メニューを閉じる)または[戻る]をクリックしてもアクティブになりません。

メニューが閉じられたことを検出するための他のアイデアはありません。だから私は他の誰かが巧妙なトリックを持っていることを望んでいます。そうしないと、PopupMenuを使用できません...

4

1 に答える 1

1

メソッドをオーバーライドしてみることができます

public void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing)

PopupMenuクラスの。まさにこのメソッドはsetOnDismissListener()、API14以降で内部的に呼び出しています。しかし、これは簡単なことではありません。問題はcom.android.internal.view.menu.MenuBuilder、Android SDKに含まれていないクラスであるため、このクラスをインポートしようとすると、コードをコンパイルできなくなります。

ただし、このクラスの独自の「偽の」実装を作成し、パッケージcom.android.internal.view.menuに入れて.jarファイルを作成し、この「偽のライブラリ」をフォルダーにコピーして、libsIntelliJIDEAのプロジェクト設定でこのライブラリのスコープを「提供」として設定できます。 。これは、このjarファイルのクラスにはすでに実際のデバイスがあり(本当のこと)、コードをコンパイルするために必要なのはそれらだけであることを意味します。ここでの主なアイデア-あなたの偽物はコンパイルのMenuBuilderためにクラスパスにあるべきですが、結果のファイルに含まれるべきではありません。javac.apk

これは簡単な解決策ではありませんが、機能するはずです。

于 2012-10-26T15:15:03.817 に答える