どうも!LSSです!
カラーピッカー作成の続き、やっていきますよ~
さて今回は、
「アプリを終了させ、再度起動した時、シークバーや色を前回終了時と同じ状態にする」
という機能を付加したいと思います。
単に現在設定中の色を保存・読み込みするだけなので、SQLiteは使わず、SharedPreferencesに預けてみたいと思います。
SharedPreferencesについてはこちらで解説していますので、良かったらそちらも併せて見てみてくださいね。
- SharedPreferences宣言その1
- SharedPreferences宣言その2
- データ読み込み部分を続けて書きます!
- 最後に、データの書き込み部分!
- エミュレータにビルドして動作確認してみます!
まず、MainActivity.ktタブを選択します。
SharedPreferencesの宣言を行いたいので、lateinitが2行ならんでいる次の行にでも追記する事にしますね。
SharedPreferences宣言その1
lateinit var prf:SharedPreferences
という一行を入力します。途中、Shaあたりまで入力したところで、
↑こんな候補が出てくるので、このSharedPreferences(android.content)を選択すればOKです。
次に、onCreate()内に、宣言の続き、そして「起動時に読み込みたい」ので、保存した内容を読み込む部分を書いていきます。
この、
setContentView(R.layout.activity_main)
と、
sb=listOf(sbR,sbG,sbB)
の間にでも、Enterキーでスキマ行を開けて書いていく事にします。
SharedPreferences宣言その2
まず、
prf=getSharedPreferences("COLORS", Context.MODE_PRIVATE)
と入力します。この時、
prf=getS
あたりまで入力したところで、
↑また、こんな候補が出てくるので、getSharedPreferences(name: String!, mode: Int )を選択します。
↑こんな風に補完されます。
続けて()内の内容を入力していきますが、
MODE、まで打ったところでまたこんな候補が出てくるので、MODE_PRIVATEを選択します。
↑こうなります。
以上でprfの用意が整いました!
データ読み込み部分を続けて書きます!
続いて、prfから取り出したデータを、このカラーピッカーで色を司る変数である、cl[0]、cl[1]、cl[2]の三兄弟に与える部分を記述します。
cl[0]=prf.getInt("cl0p",0)
cl[1]=prf.getInt("cl1p",0)
cl[2]=prf.getInt("cl2p",0)
↑こんなコードになります。
cl[0]の内容に当たる部分を、SharedPreferencesに"cl0p"という名前で値を保存する(予定)なので、こういう書き方になります。
SharedPreferencesにまだ"cl0p"が保存されていない場合(初回は確実にそうなります)は、その後ろに書いた0がcl[0]に代入される事になります。
cl[1]やcl[2]も同様、ですね。
ここまで入力したところで、画面は↓こんな感じになります。
最後に、データの書き込み部分!
あとは、SharedPreferencesにデータを書き込む部分、を作れば完成となります。
- 保存したいものはcl[0]、cl[1]、cl[2]の3つの変数の値であること
- このカラーピッカーは色が変更される時、その3つの変数に値をセットしてから
- 必ずRedraw()を呼び出して、そこで変更処理を行っていること
を考えると、Redraw()内に「SharedPreferencesにデータを保存する」処理を書いておけば、いつアプリを終了させても、次回起動時に読み込まれるのは「最後の色」って事になります。
よし、それでいきます!!
現在のRedraw()は↑こんな感じになっているので、
fun Redraw(){
と、
for (i in 0..2){sb[i].progress = cl[i]}
の間に割り込んで、SharedPreferencesに保存するコードを書いていく事にします。
書き込みたいコードはこれ↓
val prfe=prf.edit()
prfe.putInt("cl0p",cl[0])
prfe.putInt("cl1p",cl[1])
prfe.putInt("cl2p",cl[2])
prfe.apply()
特に注意点もないので、がしがし打ち込んでいきますね。
↑こんな感じになります。
これで、今回の機能追加は完了!!!です!
エミュレータにビルドして動作確認してみます!
まず、起動すると、いつも通りの真っ黒な画面になります。
(まだ、「前回の色保存」がされていないから、ですね)
そしてシークバーを適当にいじって、色を作ってみます。
…そして、アプリを終了させてしまいます。
その後、もう一度、アプリを立ち上げると(再度ビルドしてもいいです)、
↑起動直後から、さっきの色が再現されている事が確認できました!!
長ったらしい記事になりましたが、結局のところ、追加したのは
lateinit var prf:SharedPreferences
prf=getSharedPreferences("COLORS", Context.MODE_PRIVATE)
cl[0]=prf.getInt("cl0p",0)
cl[1]=prf.getInt("cl1p",0)
cl[2]=prf.getInt("cl2p",0)
val prfe=prf.edit()
prfe.putInt("cl0p",cl[0])
prfe.putInt("cl1p",cl[1])
prfe.putInt("cl2p",cl[2])
prfe.apply()
…だけ。
分かってみると、だいぶお手軽に利用できるSharedPreferences、惚れそうです(^^*
てなところで、今回はここまで!
また次回、よろしくお願いします!