Sobes.tech
Junior

Как да прехвърлим данни от една активност към друга в Android?

sobes.tech AI

Отговор от 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 споделен между Fragment-и/Activities (чрез SharedViewModel): Удобен за общи данни между свързани компоненти.
  • Bundle (вътре в Extras на Intent): putExtra всъщност използва вътрешен Bundle.
  • Статични променливи/сингълтони: Трябва да се използват внимателно, тъй като могат да доведат до течове на памет и проблеми със състоянието.
  • База данни/SharedPreferences: За постоянна съхранение или пренос на данни, които трябва да се запазят.
  • Event Bus (например, EventBus, RxJava): За пренос на събития или данни между компоненти асинхронно.
  • File I/O: Записване във файл и четене от него.