Kako preneti podatke iz jedne Activity u drugu u Androidu?
sobes.tech АИ
Одговор од АИ
Postoji nekoliko načina:
-
Intent Extras: Najčešći način. Podaci se paketuju u
Bundlei dodaju se uIntent.// U prvoj Activity Intent intent = new Intent(this, SecondActivity.class); intent.putExtra("ključ", "vrednost"); // Primitivni tipovi intent.putExtra("objekat", new MySerializableObject()); // Serializable startActivity(intent); // U drugoj Activity Bundle extras = getIntent().getExtras(); if (extras != null) { String vrednost = extras.getString("ključ"); MySerializableObject objekat = (MySerializableObject) extras.getSerializable("objekat"); } -
Parcelable objekti: Slično
Serializable, ali efikasnije za objekte koje je potrebno često prenositi. Zahteva implementaciju interfejsaParcelable.// U prvoj Activity Intent intent = new Intent(this, SecondActivity.class); intent.putExtra("parcelable_objekat", new MyParcelableObject()); startActivity(intent); // U drugoj Activity Intent intent = getIntent(); MyParcelableObject parcelableObjekat = intent.getParcelableExtra("parcelable_objekat"); -
Shared Preferences: Pogodno za prenos malih količina podataka koje treba sačuvati između pokretanja aplikacije.
// U prvoj Activity SharedPreferences preferences = getSharedPreferences("my_prefs", MODE_PRIVATE); SharedPreferences.Editor editor = preferences.edit(); editor.putString("ključ", "vrednost"); editor.apply(); // ili commit() // U drugoj Activity SharedPreferences preferences = getSharedPreferences("my_prefs", MODE_PRIVATE); String vrednost = preferences.getString("ključ", null); // null je podrazumevana vrednost -
Staticke promenljive: Ne preporučuje se, jer narušava principe OOP i može dovesti do curenja memorije. Koristite sa oprezom i samo za veoma jednostavne slučajeve.
// U statičkoj klasi ili bilo kojoj drugoj dostupnoj statičkoj promenljivoj public static String staticData; // U prvoj Activity StaticDataHolder.staticData = "podatak"; // U drugoj Activity String podaci = StaticDataHolder.staticData; -
Baza podataka/Fajl: Za veće količine podataka ili podatke koji moraju biti perzistentni. Podaci se čuvaju u bazi podataka (SQLite, Room) ili fajlu, a druga Activity ih čita.
-
ViewModel (zajedno sa LiveData): U okviru arhitektonskih komponenti, ViewModel je preferirani način upravljanja podacima UI-jem. Podaci između Activity se prenose putem shared ViewModel ili putem događaja na LiveData.
// U prvoj Activity (Kotlin) val intent = Intent(this, SecondActivity::class.java).apply { putExtra("data_key", "data_value") } startActivity(intent) // U drugoj Activity (Kotlin) val data = intent.getStringExtra("data_key")
Izbor metode zavisi od tipa i obima prenesenih podataka, kao i od zahteva za perzistencijom. Prenos podataka putem Intent Extras je standard za manje količine podataka i pri direktnom prelazu između Activity.