PreferenceFragmentを使って設定情報をアプリ内で共有する
はじめに
設定画面を作るのにPreferenceFragmentを利用しています。 PreferenceFragmentで設定した項目を別のビューでも使う方法が分からなかったので残しておきます。
注意
本記事中のKotlinのコードはKotlin Android Extensionsを利用した記述のため素のKotlinとは書き方が異なる可能性があります。 ご注意ください。
SharedPreferenceの名前を変更する
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { preferenceManager.sharedPreferencesName = $PREFERENCE_NAME$ addPreferenceFromResource(R.xml.hoge) }
ポイントはonCreatePreferences
の最初の行。
sharedPreferencesName
を使ってSharedPreferenceの名前を独自のものに変更します。
これによりPreferenceFragment以外のビューからでもSharedPreferenceを参照できるようになります。
Preferenceを保存する
PreferenceFragmentで項目を準備している場合は能動的に保存せずとも自動的に保存されます。 保存の際に使われるKeyはPreferenceFragmentのxmlで各項目に設定したKeyが利用されます。
Preferenceを読み込む
PreferenceFragmentの場合
ListPreferenceを利用した一例
val preference = findPreference($KEY$) as ListPreference preference.entry?.let { preference.summary = "$it" }
preferenceのentryをgetするとすでに読み込まれているので、それを表示する処理を書いてあげれば良い。
その他のビュー
val sharedPreference = context.getSharedPreferences($PREFERENCE_NAME$, Context.MODE_PRIVATE) val preference = preference.getString($KEY$, "")
まずgetSharedPreferences
を利用してsharedPreferenceを取得する。
getSharedPreferences
の第一引数はsharedPreferenceの名前をString
で入力、第二引数はsharedPreferenceのモードでMODE_PRIVATE, MODE_WORLD_READABLE, MODE_WORLD_WRITEABLE, MODE_MULTI_PROCESS
から用途に合ったモードを選択する。
詳しくはリファレンスを参照。
次に取得したsharedPreferenceから保存した値を取り出す。
preference.getHoge()
で保存した型に合わせたメソッドを利用して取り出す。
取り出した値を使いたいところで使えば良い。
おわりに
SharedPreferenceの名前を変更する、ここに辿りつくまでが一番大変でした。 ともあれ、これでPreferenceFragment以外からも設定項目を取り出すことが出来ました。
逆にPreferenceFragment以外から項目を設定できる気がします。 今後利用するはずなので、検証したら追記か新しい記事を作成しようと思います。
参考
android - PreferenceFragmentで任意のSharedPreferencesを使いたい - スタック・オーバーフロー