Junior
Πώς μεταφέρουμε δεδομένα από μια δραστηριότητα σε μια άλλη στο Android;
sobes.tech AI
Απάντηση από AI
Τα δεδομένα μπορούν να μεταδοθούν χρησιμοποιώντας Intent:
-
Στην αρχική Activity: Τοποθετήστε τα δεδομένα στα Extras του
Intentχρησιμοποιώντας μεθόδους όπωςputExtra(String key, value).// Προετοιμασία του Intent val intent = Intent(this, TargetActivity::class.java) // Προσθήκη δεδομένων intent.putExtra("myString", "Γειά από την πρώτη Activity") intent.putExtra("myInt", 123) intent.putExtra("myBool", true) // Μπορείτε να μεταδώσετε αντικείμενα που υλοποιούν Parcelable ή Serializable // intent.putExtra("myObject", myParcelableObject) // Εκκίνηση της νέας Activity startActivity(intent) -
Στην Activity προορισμού: Αποκτήστε τα δεδομένα από τα Extras του
Intentπου λαμβάνεται στη μέθοδοonCreateήonNewIntent.// Στο onCreate() της Activity προορισμού override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_target) // Λήψη του Intent που ξεκίνησε αυτήν την Activity val intent = intent // Ανάκτηση δεδομένων με το κλειδί val myString = intent.getStringExtra("myString") val myInt = intent.getIntExtra("myInt", 0) // Δεύτερος παράμετρος: προεπιλεγμένη τιμή val myBool = intent.getBooleanExtra("myBool", false) // Επεξεργασία των εξαγόμενων δεδομένων println("Ληφθείσα συμβολοσειρά: $myString") println("Ληφθείς αριθμός: $myInt") println("Ληφθέν boolean: $myBool") // Για Parcelable ή Serializable αντικείμενα // val myObject = intent.getParcelableExtra<MyParcelableClass>("myObject") }
Άλλες μέθοδοι μεταφοράς δεδομένων, κατάλληλες για πιο πολύπλοκα σενάρια ή μεγάλο όγκο δεδομένων:
ViewModelκοινόχρηστο μεταξύ Fragments/Activities (μέσω SharedViewModel): Χρησιμοποιείται για κοινά δεδομένα μεταξύ σχετικών συστατικών.Bundle(μέσα στα Extras του Intent): ΤοputExtraχρησιμοποιεί στην πραγματικότητα ένα εσωτερικόBundle.- Στατικές μεταβλητές/singletons: Πρέπει να χρησιμοποιούνται με προσοχή, μπορούν να οδηγήσουν σε διαρροές μνήμης και προβλήματα κατάστασης.
- Βάση δεδομένων/SharedPreferences: Για μόνιμη αποθήκευση ή μεταφορά δεδομένων που απαιτούν διατήρηση.
- Event Bus (π.χ., EventBus, RxJava): Για μεταφορά γεγονότων ή δεδομένων μεταξύ συστατικών με ασύγχρονο τρόπο.
- File I/O: Αποθήκευση σε αρχείο και ανάγνωση από αυτό.