Назад к вопросам
Junior
83
questionbank
Как передать данные из одного активити в другое в Android?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Данные можно передать, используя Intent:
-
В исходном Activity: Поместите данные вExtras
Intentс помощью методов вродеputExtra(String key, value).// Приготовление Intent val intent = Intent(this, TargetActivity::class.java) // Добавление данных intent.putExtra("myString", "Привет из первого Activity") intent.putExtra("myInt", 123) intent.putExtra("myBool", true) // Можно передавать объекты, которые реализуют Parcelable или Serializable // intent.putExtra("myObject", myParcelableObject) // Запуск нового Activity startActivity(intent) -
В целевом Activity: Извлеките данные из Extras
Intent, полученного в методеonCreateилиonNewIntent.// В onCreate() целевого Activity override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_target) // Получение Intent, который запустил это Activity val intent = intent // Извлечение данных по ключу val myString = intent.getStringExtra("myString") val myInt = intent.getIntExtra("myInt", 0) // Второй аргумент - значение по умолчанию val myBool = intent.getBooleanExtra("myBool", false) // Обработка извлеченных данных println("Полученная строка: $myString") println("Полученное число: $myInt") println("Полученное булево: $myBool") // Для Parcelable или Serializable объектов // val myObject = intent.getParcelableExtra<MyParcelableClass>("myObject") }
Другие методы передачи данных, пригодные для более сложных сценариев или большого объема данных:
ViewModelShared between Fragments/Activities (через SharedViewModel): Удобно для общих данных между связанными компонентами.Bundle(внутри Extras Intent):putExtraна самом деле используетBundleвнутри.- Статические переменные/синглтоны: Следует использовать осторожно, могут привести к утечкам памяти и проблемам с состоянием.
- База данных/SharedPreferences: Для постоянного хранения или передачи данных, требующих сохранения.
- Event Bus (например, EventBus, RxJava): Для передачи событий или данных между компонентами в асинхронном режиме.
- File I/O: Сохранение в файл и чтение из него.