変更した設定をすぐにビューに反映することにようやく成功した
PreferenceActivity を使うとたしかに簡単便利に設定画面を作ることができて、さらにその値を勝手に保持しておいてくれるので、保存先とかファイルとか考えなくてよいという点ではとても便利。と思ったのだけれど、どうやら SharedPreference のほうで保存してくれるのは Activity (プログラム?)が終了したときらしく、変更したところで即画面に反映してほしいということが、うまくいかない。
変更を検知するよ、という onSharedPreferenceChangedListener というのを使う方法が、本家のガイドやウェブのあちこちにも類似のコードがあって、それを参考にしてみるのだけれど、どうやらそこにたどりつかない。
さらには保存の処理をどうこうするらしき regist なんちゃらとか unregist なんちゃらという長いコードを、onResume とかに書いておくようにとかあるのだが、すでにそのメソッドが depricated になっていて、まあそれを一応許せと追加してから実行すると、その部分で null pointer exception が発生したりする。
そんなこんなでさんざん悩み、もはや普通に自前で作ったほうがよいのではないか、と思いつつももう一度あがいてみたらなんとかなった。
つまり、PreferenceActivity から呼び出し元の Activity に戻るのは通常戻るボタン(←)なので、呼び出し元の Activity の onResume() メソッドに今メモリ上にある SharedPreference の値を読み込んできて、それを反映させえたそこでの View を更新するようにしたのだった。
とりあえずそれでリアルに反映されて View が変更できている。(実際のところとしては GridView の列数などの情報を変更している)
これでよいのかどうか、というのはまだわかりかねるところなのだけれど、いけそうな予感はしているのだけれど。なにか問題があったりしないかどうかは確認しておくべきかもしれない。
ということで結局やっぱりそのまま PreferenceActivity を利用する方向で。
#その先のページビューのところでちょっと問題が発生していたりするので、そこをなんとかしなくては。
| 固定リンク
コメント