Jak przekazać dane z jednej Activity do drugiej w Androidzie?
sobes.tech AI
Odpowiedź od AI
Istnieje kilka sposobów:
-
Extras Intent: Najczęstszy sposób. Dane są pakowane w
Bundlei dodawane doIntent.// W pierwszej Activity Intent intent = new Intent(this, SecondActivity.class); intent.putExtra("klucz", "wartość"); // Typy prymitywne intent.putExtra("obiekt", new MySerializableObject()); // Serializable startActivity(intent); // W drugiej Activity Bundle extras = getIntent().getExtras(); if (extras != null) { String wartość = extras.getString("klucz"); MySerializableObject obiekt = (MySerializableObject) extras.getSerializable("obiekt"); } -
Obiekty Parcelable: Podobnie jak
Serializable, ale bardziej wydajne dla często przesyłanych obiektów. Wymaga implementacji interfejsuParcelable.// W pierwszej Activity Intent intent = new Intent(this, SecondActivity.class); intent.putExtra("parcelable_obiekt", new MyParcelableObject()); startActivity(intent); // W drugiej Activity Intent intent = getIntent(); MyParcelableObject parcelableObiekt = intent.getParcelableExtra("parcelable_obiekt"); -
Shared Preferences: Odpowiednie do przesyłania niewielkich ilości danych, które muszą być zachowane między uruchomieniami aplikacji.
// W pierwszej Activity SharedPreferences preferences = getSharedPreferences("moje_prefs", MODE_PRIVATE); SharedPreferences.Editor editor = preferences.edit(); editor.putString("klucz", "wartość"); editor.apply(); // lub commit() // W drugiej Activity SharedPreferences preferences = getSharedPreferences("moje_prefs", MODE_PRIVATE); String wartość = preferences.getString("klucz", null); // null to wartość domyślna -
Zmienne statyczne: Niezalecane, ponieważ narusza zasady OOP i może prowadzić do wycieków pamięci. Używaj ostrożnie i tylko w bardzo prostych przypadkach.
// W statycznej klasie lub innej dostępnej zmiennej statycznej public static String daneStatyczne; // W pierwszej Activity StaticDataHolder.daneStatyczne = "dane"; // W drugiej Activity String dane = StaticDataHolder.daneStatyczne; -
Baza danych/Plik: Dla dużych ilości danych lub danych, które muszą być trwałe. Dane są zapisywane w bazie danych (SQLite, Room) lub pliku, a druga Activity je odczytuje.
-
ViewModel (wspólnie z LiveData): W kontekście komponentów architektonicznych, ViewModel jest preferowanym sposobem zarządzania danymi i logiką UI. Dane między Activity są przekazywane przez wspólny ViewModel lub przez zdarzenia na LiveData.
// W pierwszej Activity (Kotlin) val intent = Intent(this, SecondActivity::class.java).apply { putExtra("klucz_danych", "wartość_danych") } startActivity(intent) // W drugiej Activity (Kotlin) val dane = intent.getStringExtra("klucz_danych")
Wybór metody zależy od typu i ilości przesyłanych danych, a także od wymagań dotyczących trwałości. Przesyłanie danych przez Extras Intent jest standardem dla niewielkich ilości danych i bezpośrednich przejść między Activity.