Jak předat data z jedné Activity do druhé v Androidu?
sobes.tech AI
Odpověď od AI
Existuje několik způsobů:
-
Intent Extras: Nejčastější způsob. Data jsou zabalená do
Bundlea přidána kIntent.// V první Activity Intent intent = new Intent(this, SecondActivity.class); intent.putExtra("klíč", "hodnota"); // Primitivní typy intent.putExtra("objekt", new MySerializableObject()); // Serializable startActivity(intent); // Ve druhé Activity Bundle extras = getIntent().getExtras(); if (extras != null) { String hodnota = extras.getString("klíč"); MySerializableObject objekt = (MySerializableObject) extras.getSerializable("objekt"); } -
Parcelable objekty: Podobně jako
Serializable, ale výkonnější pro objekty, které je třeba často přenášet. Vyžaduje implementaci rozhraníParcelable.// V první Activity Intent intent = new Intent(this, SecondActivity.class); intent.putExtra("parcelable_objekt", new MyParcelableObject()); startActivity(intent); // Ve druhé Activity Intent intent = getIntent(); MyParcelableObject parcelableObjekt = intent.getParcelableExtra("parcelable_objekt"); -
Shared Preferences: Vhodné pro přenos malých objemů dat, která mají být zachována mezi spuštěními aplikace.
// V první Activity SharedPreferences preferences = getSharedPreferences("my_prefs", MODE_PRIVATE); SharedPreferences.Editor editor = preferences.edit(); editor.putString("klíč", "hodnota"); editor.apply(); // nebo commit() // Ve druhé Activity SharedPreferences preferences = getSharedPreferences("my_prefs", MODE_PRIVATE); String hodnota = preferences.getString("klíč", null); // null je výchozí hodnota -
Statické proměnné: Nedoporučuje se, protože porušuje principy OOP a může vést k únikům paměti. Používejte opatrně a pouze pro velmi jednoduché případy.
// Ve statické třídě nebo jiné dostupné statické proměnné public static String staticData; // V první Activity StaticDataHolder.staticData = "data"; // Ve druhé Activity String data = StaticDataHolder.staticData; -
Databáze/Soubor: Pro větší objemy dat nebo data, která mají být perzistentní. Data jsou uložena v databázi (SQLite, Room) nebo souboru, a druhá Activity je čte.
-
ViewModel (spolu s LiveData): V kontextu architektonických komponent je ViewModel preferovaným způsobem správy dat UI-vázané logiky. Data mezi Activity jsou přenášena přes sdílený ViewModel nebo přes události na LiveData.
// V první Activity (Kotlin) val intent = Intent(this, SecondActivity::class.java).apply { putExtra("data_key", "data_value") } startActivity(intent) // Ve druhé Activity (Kotlin) val data = intent.getStringExtra("data_key")
Volba metody závisí na typu a objemu přenášených dat, stejně jako na požadavcích na perzistenci. Přenos dat přes Intent Extras je standardem pro malé objemy dat a při přímém přechodu mezi Activity.