Little Strange Software

スマホアプリの開発を行う LittleStrangeSoftware のブログです。

Androidアプリ開発初心者がkotlinでカラーピッカーを作ってみるよ! その12

 どうも!LSSです!

 

 カラーピッカー作成の続き、やっていきますよ~

 

 さて今回は、
「アプリを終了させ、再度起動した時、シークバーや色を前回終了時と同じ状態にする」
という機能を付加したいと思います。

 単に現在設定中の色を保存・読み込みするだけなので、SQLiteは使わず、SharedPreferencesに預けてみたいと思います。

 SharedPreferencesについてはこちらで解説していますので、良かったらそちらも併せて見てみてくださいね。

 

 

 まず、MainActivity.ktタブを選択します。

f:id:little_strange:20191007203311p:plain

SharedPreferencesの宣言を行いたいので、lateinitが2行ならんでいる次の行にでも追記する事にしますね。

 

 

SharedPreferences宣言その1

lateinit var prf:SharedPreferences

という一行を入力します。途中、Shaあたりまで入力したところで、

f:id:little_strange:20191007203702p:plain

↑こんな候補が出てくるので、このSharedPreferences(android.content)を選択すればOKです。

 

 次に、onCreate()内に、宣言の続き、そして「起動時に読み込みたい」ので、保存した内容を読み込む部分を書いていきます。

f:id:little_strange:20191007204153p:plain

 この、

setContentView(R.layout.activity_main)

と、

 sb=listOf(sbR,sbG,sbB)

の間にでも、Enterキーでスキマ行を開けて書いていく事にします。

 

 

SharedPreferences宣言その2

まず、

prf=getSharedPreferences("COLORS", Context.MODE_PRIVATE)

と入力します。この時、

prf=getS

あたりまで入力したところで、

f:id:little_strange:20191007204508p:plain

↑また、こんな候補が出てくるので、getSharedPreferences(name: String!, mode: Int )を選択します。

 

f:id:little_strange:20191007204903p:plain

↑こんな風に補完されます。

 

 続けて()内の内容を入力していきますが、

f:id:little_strange:20191007205058p:plain

 

MODE、まで打ったところでまたこんな候補が出てくるので、MODE_PRIVATEを選択します。 

 

f:id:little_strange:20191007205310p:plain

↑こうなります。

 以上で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"が保存されていない場合(初回は確実にそうなります)は、その後ろに書いた0cl[0]に代入される事になります。

cl[1]cl[2]も同様、ですね。

 

  ここまで入力したところで、画面は↓こんな感じになります。

f:id:little_strange:20191007210928p:plain

 

 

最後に、データの書き込み部分!

 

 あとは、SharedPreferencesにデータを書き込む部分、を作れば完成となります。

  • 保存したいものはcl[0]cl[1]cl[2]の3つの変数の値であること
  • このカラーピッカーは色が変更される時、その3つの変数に値をセットしてから
  • 必ずRedraw()を呼び出して、そこで変更処理を行っていること

を考えると、Redraw()内に「SharedPreferencesにデータを保存する」処理を書いておけば、いつアプリを終了させても、次回起動時に読み込まれるのは「最後の色」って事になります。

 よし、それでいきます!!

 

 

f:id:little_strange:20191007211956p:plain

 現在の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()

 

  特に注意点もないので、がしがし打ち込んでいきますね。

 

f:id:little_strange:20191007212731p:plain

↑こんな感じになります。

 これで、今回の機能追加は完了!!!です!

 

 

 エミュレータにビルドして動作確認してみます!

f:id:little_strange:20191007213207p:plain

 まず、起動すると、いつも通りの真っ黒な画面になります。
(まだ、「前回の色保存」がされていないから、ですね) 

 

 そしてシークバーを適当にいじって、色を作ってみます。

f:id:little_strange:20191007213358p:plain

 

…そして、アプリを終了させてしまいます。

 

 その後、もう一度、アプリを立ち上げると(再度ビルドしてもいいです)、

f:id:little_strange:20191007213606p:plain

↑起動直後から、さっきの色が再現されている事が確認できました!!
 

 

 長ったらしい記事になりましたが、結局のところ、追加したのは

 

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、惚れそうです(^^*

 

てなところで、今回はここまで!

 また次回、よろしくお願いします!