【Kotlin/Android Studio】Bundleとは?データの保存とsavedInstanceState
この記事からわかること
- Android Studio/KotlinでBundleクラスの実装方法
- savedInstanceStateの使い方
- ActivityやFragment間でデータを受け渡す方法
index
[open]
\ アプリをリリースしました /
友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-
posted withアプリーチ
参考文献:公式リファレンス:SimpleOnItemTouchListener
環境
- Android Studio:Flamingo
- Kotlin:1.8.20
Bundleとは?
BundleとはAndroidでデータを格納する入れ物として用意されているコンテナです。保存するデータはキーと値がペアで管理されており、Activity間やFragment間でのデータの受け渡しに利用されることが多いです。ActivityではIntent
クラスの内部でBundleが使用されています。
Bundleとは「束ねる」や「包みにする」といった意味を持つ英単語であり、その言葉通りAndroidにおいてデータを束ねて保管する役割を持っています。
savedInstanceState
Bundleが使用されている箇所としてActivityやFragmentなどの再生成時のデータ保持に利用されています。Androidの画面ではデバイス画面の回転時やバックスタックからの戻り時などActivityやFragmentなどが再生成されるタイミングが多いです。その際にデータが消失してしまわないようにsavedInstanceState
というBundleを使用したデータ保存の仕組みが用意されています。
破棄される前に呼ばれるonSaveInstanceState
メソッド内でBundle内に格納し、再生成時に呼ばれるonRestoreInstanceState
メソッド内やonCreate
メソッド内で保存したデータを参照することが可能になっています。
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
// 保存したいデータをBundleに格納
outState.putString("key", "Hello, savedInstanceState!")
}
override fun onRestoreInstanceState(savedInstanceState: Bundle) {
super.onRestoreInstanceState(savedInstanceState)
// 保存されたデータを取り出す
val value = savedInstanceState.getString("key")
Toast.makeText(this,value.toString(),Toast.LENGTH_LONG)
.show()
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
if (savedInstanceState != null) {
val value = savedInstanceState.getString("key")
}
}
Bundleクラスの使い方
Bundleクラスはキーと値でデータを保管する入れ物でした。使用するにはまずBundle
インスタンスを生成します。生成したインスタンス内にデータを格納するにはputXXXXX
メソッドを使用します。
val bundle = Bundle()
bundle.putString("key", "Hello World!")
bundle.putInt("intKey", 42)
bundle.putBoolean("boolKey", true)
bundle.putDouble("doubleKey", 3.14)
例えばFragmentにデータを渡したい場合はFragmentのarguments
にBundleを渡します。あとはそのまま遷移させます。
val fragment = SecondFragment()
fragment.arguments = bundle
val button: Button = view.findViewById(R.id.button2)
button.setOnClickListener {
parentFragmentManager.beginTransaction().apply {
add(R.id.main_frame,fragment)
.addToBackStack(null)
.commit()
}
}
遷移先となる「SecondFragment」ではgetXXXXX
メソッドを使用してデータを取得します。
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val str = arguments?.getString("key")
val int = arguments?.getInt("intKey")
val bool = arguments?.getBoolean("boolKey")
val double = arguments?.getDouble("doubleKey")
Toast.makeText(this.requireContext(),str.toString(),Toast.LENGTH_LONG)
.show()
Toast.makeText(this.requireContext(),int.toString(),Toast.LENGTH_LONG)
.show()
Toast.makeText(this.requireContext(),bool.toString(),Toast.LENGTH_LONG)
.show()
Toast.makeText(this.requireContext(),double.toString(),Toast.LENGTH_LONG)
.show()
}
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。