Класс Bundle
Класс Bundle переносит данные между
компонентами: extras у
Intent,
аргументы фрагментов, savedInstanceState.
Строки и числа кладут через
putString
и
putInt,
читают через
getString
и
getInt.
Объект должен оставаться небольшим,
иначе возможен TransactionTooLargeException.
Синтаксис
val bundle = Bundle()
bundle.putString("note", "abcde")
Методы
| Метод | Описание |
|---|---|
putString |
Записывает строку по ключу. |
getString |
Читает строку по ключу или null. |
putInt |
Записывает целое число по ключу. |
getInt |
Читает Int по ключу с defaultValue. |
putBoolean |
Записывает логическое значение по ключу. |
getBoolean |
Читает Boolean по ключу с defaultValue. |
Пример
Давайте соберём bundle и положим в intent:
import android.content.Intent
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.material3.Button
import androidx.compose.material3.Text
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
Button(onClick = {
val bundle = Bundle().apply {
putString("note", "12345")
putInt("count", 2)
}
val intent = Intent(this@MainActivity, SecondActivity::class.java)
intent.putExtras(bundle)
startActivity(intent)
}) {
Text(text = "abcde")
}
}
}
}
На экране кнопка передаст bundle с note и count на SecondActivity.
Пример
Давайте прочитаем bundle из savedInstanceState:
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.material3.Text
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val note = savedInstanceState?.getString("note") ?: "abcde"
setContent {
Text(text = note)
}
}
override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState)
outState.putString("note", "12345")
}
}
На экране после поворота будет текст "12345"
из сохранённого bundle, до поворота - "abcde".