Назад к вопросам
Junior
83
questionbank

Как передать данные из одного активити в другое в Android?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Данные можно передать, используя Intent:

  1. В исходном 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)
    
  2. В целевом 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")
    }
    

Другие методы передачи данных, пригодные для более сложных сценариев или большого объема данных:

  • ViewModel Shared between Fragments/Activities (через SharedViewModel): Удобно для общих данных между связанными компонентами.
  • Bundle (внутри Extras Intent): putExtra на самом деле использует Bundle внутри.
  • Статические переменные/синглтоны: Следует использовать осторожно, могут привести к утечкам памяти и проблемам с состоянием.
  • База данных/SharedPreferences: Для постоянного хранения или передачи данных, требующих сохранения.
  • Event Bus (например, EventBus, RxJava): Для передачи событий или данных между компонентами в асинхронном режиме.
  • File I/O: Сохранение в файл и чтение из него.