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