Как да прехвърлим данни от една Activity към друга в Android?
sobes.tech AI
Отговор от AI
Има няколко начина:
-
Intent Extras: Най-често срещаният начин. Данните се опаковат в
Bundleи се добавят къмIntent.// В първата Activity Intent intent = new Intent(this, SecondActivity.class); intent.putExtra("ключ", "стойност"); // Примитивни типове intent.putExtra("обект", new MySerializableObject()); // Serializable startActivity(intent); // Във втората Activity Bundle extras = getIntent().getExtras(); if (extras != null) { String стойност = extras.getString("ключ"); MySerializableObject обект = (MySerializableObject) extras.getSerializable("обект"); } -
Parcelable обекти: Аналогично
Serializable, но по-ефективен за обекти, които трябва често да се пренасят. Изисква реализиране на интерфейсаParcelable.// В първата Activity Intent intent = new Intent(this, SecondActivity.class); intent.putExtra("parcelable_обект", new MyParcelableObject()); startActivity(intent); // Във втората Activity Intent intent = getIntent(); MyParcelableObject parcelableОбект = intent.getParcelableExtra("parcelable_обект"); -
Shared Preferences: Подходящ за пренасяне на малки обеми данни, които трябва да се запазват между стартиранията на приложението.
// В първата Activity SharedPreferences preferences = getSharedPreferences("my_prefs", MODE_PRIVATE); SharedPreferences.Editor editor = preferences.edit(); editor.putString("ключ", "стойност"); editor.apply(); // или commit() // Във втората Activity SharedPreferences preferences = getSharedPreferences("my_prefs", MODE_PRIVATE); String стойност = preferences.getString("ключ", null); // null - стойност по подразбиране -
Статични променливи: Не се препоръчва, тъй като нарушава принципите на ООП и може да доведе до течове на памет. Използвайте с внимание и само за много прости случаи.
// В статичен клас или друга достъпна статична променлива public static String staticData; // В първата Activity StaticDataHolder.staticData = "данни"; // Във втората Activity String данни = StaticDataHolder.staticData; -
База данни/Файл: За големи обеми данни или данни, които трябва да са персистентни. Данните се запазват в база данни (SQLite, Room) или файл, и втората Activity ги чете.
-
ViewModel (заедно с LiveData): В контекста на архитектурните компоненти, ViewModel е предпочитаният начин за управление на данните на UI. Данните между Activity се пренасят чрез споделен ViewModel или чрез събития на LiveData.
// В първата Activity (Kotlin) val intent = Intent(this, SecondActivity::class.java).apply { putExtra("data_key", "data_value") } startActivity(intent) // Във втората Activity (Kotlin) val data = intent.getStringExtra("data_key")
Изборът на метод зависи от типа и обема на пренасяните данни, както и от изискванията за персистентност. Пренасянето на данни чрез Intent Extras е стандартът за малки обеми данни и при преход между Activity.