Ինչպե՞ս փոխանցել տվյալները մեկ Activity-ից մյուսին Android-ում։
sobes.tech AI
Պատասխան AI-ից
Կան մի քանի եղանակներ.
-
Intent Extras: Ամենատարածված միջոցը։ Տվյալները փաթեթավորվում են
Bundle-ում և ավելացվում ենIntent-ին։// Առաջին Activity-ում Intent intent = new Intent(this, SecondActivity.class); intent.putExtra(" բանալի ", " արժեք "); // Բազային տիպեր intent.putExtra(" օբյեկտ ", new MySerializableObject()); // Serializable startActivity(intent); // Երկրորդ Activity-ում Bundle extras = getIntent().getExtras(); if (extras != null) { String արժեք = extras.getString(" բանալի "); MySerializableObject օբյեկտ = (MySerializableObject) extras.getSerializable(" օբյեկտ "); } -
Parcelable օբյեկտներ: Նման է
Serializable-ին, բայց ավելի արդյունավետ է հաճախ փոխանցվող օբյեկտների համար։ Պահանջվում էParcelableինտերֆեյսի իրականացմանը։// Առաջին Activity-ում Intent intent = new Intent(this, SecondActivity.class); intent.putExtra(" parcelable_օբյեկտ ", new MyParcelableObject()); startActivity(intent); // Երկրորդ Activity-ում Intent intent = getIntent(); MyParcelableObject parcelableՕբյեկտ = intent.getParcelableExtra(" parcelable_օբյեկտ "); -
Shared Preferences: Հարմար է փոքր չափերի տվյալների փոխանցման համար, որոնք պետք է պահպանվեն ծրագրի գործարկումների միջև։
// Առաջին Activity-ում SharedPreferences preferences = getSharedPreferences("my_prefs", MODE_PRIVATE); SharedPreferences.Editor editor = preferences.edit(); editor.putString(" բանալի ", " արժեք "); editor.apply(); // կամ commit() // Երկրորդ Activity-ում SharedPreferences preferences = getSharedPreferences("my_prefs", MODE_PRIVATE); String արժեք = preferences.getString(" բանալի ", null); // null - ըստ նախնական արժեքի -
Ստատիկ փոփոխականներ: Չի խորհուրդ տրվում, քանի որ խախտում է OOP սկզբունքները և կարող է հանգեցնել հիշողության լքման։ Օգտագործեք զգուշությամբ և միայն շատ պարզ դեպքերում։
// Ստատիկ դասում կամ ցանկացած այլ հասանելի ստատիկ փոփոխականում public static String staticData; // Առաջին Activity-ում StaticDataHolder.staticData = "տվյալներ"; // Երկրորդ Activity-ում String տվյալներ = StaticDataHolder.staticData; -
Տվյալների բազա/Ֆայլ: Մեծ ծավալների կամ պերմանենտ տվյալների համար։ Տվյալները պահվում են բազայում (SQLite, Room) կամ ֆայլում, և երկրորդ Activity-ն կարդում է դրանք։
-
ViewModel (համատեղ LiveData-ով): Մշակութային կոմպոնենտների շրջանակում ViewModel-ը նախընտրելի միջոց է UI-կապված տվյալների կառավարման համար։ Տվյալները Activity-ների միջև փոխանցվում են համատեղ ViewModel-ով կամ LiveData- ի միջոցներով։
// Առաջին Activity-ում (Kotlin) val intent = Intent(this, SecondActivity::class.java).apply { putExtra("data_key", "data_value") } startActivity(intent) // Երկրորդ Activity-ում (Kotlin) val data = intent.getStringExtra("data_key")
Ընտրությունը կախված է փոխանցվող տվյալների տեսակից և ծավալից, ինչպես նաև պերմանենտության պահանջներից։ Տվյալների փոխանցումը Intent Extras-ով սովորական է փոքր ծավալների համար և ուղիղ անցում կատարելու ժամանակ։