プログラムにリモートサービスのクレデンシャルを保存させたいので、ユーザーはそれらを一度プリファレンスに設定し、それを二度と行わないようにします。
そこで、DialogPreferenceをサブクラス化しました。クラスには、ログインとパスワードの2つのフィールドがある素敵なダイアログが表示されます。とても良い。
ここで、ユーザーがデータを入力して[OK]をクリックしたときにデータを検証します。これは、不正なログインが保存されているという愚かな状況を防ぐためです。ユーザーに警告を表示して、データをもう一度入力するように依頼する必要があります。
最初の問題は次のとおりです。ボタンがクリックされると、DialogPreferenceのデフォルトの動作が閉じます(なぜだろうか)。もちろん、onDialogClosed()をオーバーライドしてそこでログインを検証できますが、呼び出してもダイアログは閉じられます。 super.onDialogClosed()かどうか。
OK、数時間検索して試した後、一見見栄えのする答えを見つけました。ポジティブボタンのクリックハンドラーは、私が望むものを許可します。ただし、別の問題が発生します。元のクリックハンドラーが置き換えられると、ダイアログが閉じなくなります。super.onDialogClosed()を呼び出しても役に立ちません。このメソッドは、制御を提供しない単なる通知であると思います。
では、DialogPreferenceをプログラムで閉じて肯定的な結果を得るにはどうすればよいでしょうか。ポジティブボタンのデフォルトのクリックハンドラーを置き換えるので、古いハンドラーを自分で呼び出す必要があると思いますが、どうすればよいですか?