Cum poți transmite date de la o Activity la alta în Android?
sobes.tech AI
Răspuns de la AI
Există mai multe modalități:
-
Extras de Intent: Cea mai comună metodă. Datele sunt împachetate într-un
Bundleși adăugate laIntent.// În prima Activity Intent intent = new Intent(this, SecondActivity.class); intent.putExtra("cheie", "valoare"); // Tipuri primitive intent.putExtra("obiect", new MySerializableObject()); // Serializable startActivity(intent); // În a doua Activity Bundle extras = getIntent().getExtras(); if (extras != null) { String valoare = extras.getString("cheie"); MySerializableObject obiect = (MySerializableObject) extras.getSerializable("obiect"); } -
Obiecte Parcelable: Similar cu
Serializable, dar mai eficient pentru obiecte transmise frecvent. Necesită implementarea interfețeiParcelable.// În prima Activity Intent intent = new Intent(this, SecondActivity.class); intent.putExtra("obiect_parcelable", new MyParcelableObject()); startActivity(intent); // În a doua Activity Intent intent = getIntent(); MyParcelableObject obiectParcelable = intent.getParcelableExtra("obiect_parcelable"); -
Shared Preferences: Potrivit pentru transmiterea unor volume mici de date care trebuie păstrate între lansările aplicației.
// În prima Activity SharedPreferences preferences = getSharedPreferences("preferintele_mele", MODE_PRIVATE); SharedPreferences.Editor editor = preferences.edit(); editor.putString("cheie", "valoare"); editor.apply(); // sau commit() // În a doua Activity SharedPreferences preferences = getSharedPreferences("preferintele_mele", MODE_PRIVATE); String valoare = preferences.getString("cheie", null); // null - valoarea implicită -
Variabile statice: Nu se recomandă, deoarece încalcă principiile OOP și poate duce la scurgeri de memorie. Folosiți cu prudență și doar pentru cazuri foarte simple.
// Într-o clasă statică sau orice altă variabilă statică accesibilă public static String dateStatiste; // În prima Activity StaticDataHolder.dateStatiste = "date"; // În a doua Activity String date = StaticDataHolder.dateStatiste; -
Bază de date/Fișier: Pentru volume mari de date sau date care trebuie să fie persistente. Datele sunt salvate într-o bază de date (SQLite, Room) sau fișier, iar a doua Activity le citește.
-
ViewModel (împreună cu LiveData): În contextul componentelor arhitecturale, ViewModel este metoda preferată pentru gestionarea datelor și logicii legate de UI. Datele între Activity-uri sunt transmise printr-un ViewModel partajat sau prin evenimente pe LiveData.
// În prima Activity (Kotlin) val intent = Intent(this, SecondActivity::class.java).apply { putExtra("cheie_date", "valoare_date") } startActivity(intent) // În a doua Activity (Kotlin) val date = intent.getStringExtra("cheie_date")
Alegerea metodei depinde de tipul și volumul datelor transmise, precum și de cerințele de persistență. Transmiterea datelor prin Extras de Intent este standardul pentru volume mici de date și pentru tranziții directe între Activity-uri.