Kaip perduoti duomenis iš vienos Activity į kitą Android'e?
sobes.tech AI
Atsakymas iš AI
Yra keletas būdų:
-
Intent Extras: Dažniausias būdas. Duomenys supakuojami į
Bundleir pridedami prieIntent.// Pirmoje Activity Intent intent = new Intent(this, SecondActivity.class); intent.putExtra("raktas", "reikšmė"); // Pagrindiniai tipai intent.putExtra("objektas", new MySerializableObject()); // Serializable startActivity(intent); // Antroje Activity Bundle extras = getIntent().getExtras(); if (extras != null) { String reikšmė = extras.getString("raktas"); MySerializableObject objektas = (MySerializableObject) extras.getSerializable("objektas"); } -
Parcelable objektai: Panašiai kaip
Serializable, bet efektyvesni dažnai perduodamiems objektams. ReikalaujaParcelablesąsajos įgyvendinimo.// Pirmoje Activity Intent intent = new Intent(this, SecondActivity.class); intent.putExtra("parcelable_objektas", new MyParcelableObject()); startActivity(intent); // Antroje Activity Intent intent = getIntent(); MyParcelableObject parcelableObjektas = intent.getParcelableExtra("parcelable_objektas"); -
Shared Preferences: Tinka mažų duomenų perdavimui, kurie turi būti išsaugoti tarp programos paleidimų.
// Pirmoje Activity SharedPreferences preferences = getSharedPreferences("my_prefs", MODE_PRIVATE); SharedPreferences.Editor editor = preferences.edit(); editor.putString("raktas", "reikšmė"); editor.apply(); // arba commit() // Antroje Activity SharedPreferences preferences = getSharedPreferences("my_prefs", MODE_PRIVATE); String reikšmė = preferences.getString("raktas", null); // null - numatytoji reikšmė -
Statinės kintamosios: Nerekomenduojama, nes pažeidžia OOP principus ir gali sukelti atminties nutekėjimą. Naudokite atsargiai ir tik labai paprastais atvejais.
// Statinioje klasėje arba kitoje prieinamoje statinėje kintamojoje public static String staticData; // Pirmoje Activity StaticDataHolder.staticData = "duomenys"; // Antroje Activity String duomenys = StaticDataHolder.staticData; -
Duomenų bazė/Faila: Dideliems duomenų kiekiams arba duomenims, kurie turi būti nuolatiniai. Duomenys saugomi duomenų bazėje (SQLite, Room) arba faile, ir kita Activity juos skaito.
-
ViewModel (kartu su LiveData): Architektūrinių komponentų kontekste, ViewModel yra pageidaujamas būdas valdyti UI susijusius duomenis. Duomenys tarp Activity perduodami per bendrą ViewModel arba per LiveData įvykius.
// Pirmoje Activity (Kotlin) val intent = Intent(this, SecondActivity::class.java).apply { putExtra("data_key", "data_value") } startActivity(intent) // Antroje Activity (Kotlin) val data = intent.getStringExtra("data_key")
Pasirinkimas priklauso nuo perduodamų duomenų tipo ir kiekio, taip pat nuo reikalavimų dėl nuolatinio saugojimo. Duomenų perdavimas per Intent Extras yra standartinis mažų duomenų kiekių ir tiesioginio perėjimo tarp Activity būdas.