10

onUserInteractionユーザーとのやり取りで が呼び出されることが予想されます。で正常に動作しPreferenceActivityます。ただし、 aDialogPreferenceがポップアップするonUserInteractionと、タッチ イベントなどのユーザー インタラクションがあっても呼び出されなくなります。

それ DialogPreferenceだけではないようです。が表示されるときはいつでもDialog、ユーザー インタラクションをアクティビティに報告しません。

しかし、本当に必要な場合はどうすればよいですか。ありがとうございました。

4

3 に答える 3

10

私の知る限りonUserInteraction()、ユーザーがダイアログと対話している間は呼び出されません (対話をActivity監視している場所から開始された場合でも)。

私が知っている2つの解決策は次のとおりです。

  • サブクラスDialog/DialogPreferenceクラスとオーバーライドdispatchTouchEvent()

  • Window.Callbackインターフェイスを実装Dialogし、次を発行してウィンドウ コールバックとして設定します。

    dialog.getWindow().setCallback(callbackImplementation);
    

    注:この実装では、適切なダイアログ メソッドを呼び出して、受信したすべてのイベントを処理するか、独自の方法で (たとえば、手動で を呼び出してonUserInteraction()) イベントを処理する必要があります。

編集

ActivityカスタムPreferenceDialogインスタンスから取得するには、いくつかの方法があります。

  1. DialogPreference.getPreferenceManager()を返すメソッドを呼び出しますPreferenceManagergetActivity()メソッドはありますが、パッケージプライベートであるため、カスタムDialogPreferenceandroid.preferenceパッケージに入れてアクセスする必要があります。

  2. PreferenceActivity.onCreate()、プリファレンスを膨らませた後、キーfindPreference()でカスタムを見つけるために使用しますDialogPreference。次に、それをカスタム クラスにキャストしthis、アクセサーを介してアクティビティを設定します。

私は2番目のオプションを使用します。

于 2013-02-12T09:32:05.737 に答える