PreferencesActivityのDialogPreferenceとEditTextPreferenceの設定-コンピュータクワガタ
で勉強させていただいていおります。
前回に引き続き、設定画面(保存機能付き)を勉強していきます。
テキスト入力の画面に関しては、ダイアログを表示してその中にユーザーが値をいれてOKを行う事で表示がされます。
今回の必須の項目は以下です。
key:キー
dialogTitle:ダイアログに出るタイトル
title:通常の見出し
summary:見出しの説明文
preference用のxmlは以下です。
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> <EditTextPreference android:key="edit" android:dialogTitle="好きな動物入力してください" android:title="好きな動物は?" android:summary="あなたが好きな動物は何ですか?" /> </PreferenceScreen>
とすると、下記のようにメニューが表示されます。クリックをするとダイアログが表示されます。
上記に入力をすると次回開いた時も値が入っていて、入力する値の欄に表示がされています。
ここまでの段階で、「あれ、気持ち悪い。」と思ってしまいました。入力した値の確認がダイアログを開くまでできない。。
PreferenceActivityが呼び出された場合にsummaryを変更して入力した値の確認ができるようにしましょう。
EditTextPreference _edit = (EditTextPreference)findPreference("edit"); _edit.setSummary(_edit.getText())
とすると、設定画面を開いた時に入力しておいた値を確認ができます。
ですが、ここでダイアログを閉じた段階で入力した値を反映したいのでリスナーを追加します。
_edit.setOnPreferenceChangeListener(this); public boolean onPreferenceChange(Preference preference, Object newValue) { EditTextPreference _edit = (EditTextPreference)findPreference("edit"); if(preference == _edit){ _edit.setSummary("あなたの好きな動物は"+newValue.toString()+"ですね。"); } return true; }
上記では、_edit.getText()を利用しないのはonPreferenceChangeは変更中に実行される関数で実行が完了した後に_edit.getText()に反映がされるので、変更される値を直接取得してしまいます。
以上を実装すると保存されている値に関しては、ダイアログを開かなくても確認ができるようになりました。
また、下記を実装する事もできます。
dialogMessage:”ダイアログのサマリー”
positiveButtonText:”OKボタンのテキスト”
negativeButtonText:”CANCELボタンのテキスト”