Sobes.tech
Junior

Hogyan lehet adatokat átadni egyik Activity-ből a másikba Androidban?

sobes.tech MI

Válasz az MI-től

Néhány módszer létezik:

  1. Intent Extras: A leggyakoribb módszer. Az adatok csomagolva vannak Bundle-be, és hozzáadva az Intent-hez.

    // Az első Activity-ben
    Intent intent = new Intent(this, SecondActivity.class);
    intent.putExtra("kulcs", "érték"); // Alapvető típusok
    intent.putExtra("objektum", new MySerializableObject()); // Serializable
    startActivity(intent);
    
    // A második Activity-ben
    Bundle extras = getIntent().getExtras();
    if (extras != null) {
        String érték = extras.getString("kulcs");
        MySerializableObject objektum = (MySerializableObject) extras.getSerializable("objektum");
    }
    
  2. Parcelable Objects: Hasonló a Serializable-hez, de hatékonyabb azoknál az objektumoknál, amelyeket gyakran kell átadni. Megköveteli a Parcelable interfész megvalósítását.

    // Az első Activity-ben
    Intent intent = new Intent(this, SecondActivity.class);
    intent.putExtra("parcelable_objektum", new MyParcelableObject());
    startActivity(intent);
    
    // A második Activity-ben
    Intent intent = getIntent();
    MyParcelableObject parcelableObjektum = intent.getParcelableExtra("parcelable_objektum");
    
  3. Shared Preferences: Kisebb adatmennyiség átadására alkalmas, amelyeket meg kell tartani az alkalmazás indításai között.

    // Az első Activity-ben
    SharedPreferences preferences = getSharedPreferences("my_prefs", MODE_PRIVATE);
    SharedPreferences.Editor szerkesztő = preferences.edit();
    szerkesztő.putString("kulcs", "érték");
    szerkesztő.apply(); // vagy commit()
    
    // A második Activity-ben
    SharedPreferences preferences = getSharedPreferences("my_prefs", MODE_PRIVATE);
    String érték = preferences.getString("kulcs", null); // null az alapértelmezett érték
    
  4. Statikus változók: Nem ajánlott, mivel megsérti az OOP elveit, és memóriaszivárgáshoz vezethet. Csak nagyon egyszerű esetekben használja óvatosan.

    // Egy statikus osztályban vagy más elérhető statikus változóban
    public static String staticData;
    
    // Az első Activity-ben
    StaticDataHolder.staticData = "adatok";
    
    // A második Activity-ben
    String adatok = StaticDataHolder.staticData;
    
  5. Adatbázis/Fájl: Nagyobb adatmennyiség vagy tartós adat esetén. Az adatok adatbázisban (SQLite, Room) vagy fájlban tárolódnak, és a második Activity olvassa őket.

  6. ViewModel (együtt LiveData-val): Az architekturális komponensek kontextusában a ViewModel az előnyben részesített módszer a UI-hoz kötött adatok kezelésére. Az adatok az Activity-k között shared ViewModel vagy LiveData eseményeken keresztül kerülnek átadásra.

    // Az első Activity-ben (Kotlin)
    val intent = Intent(this, SecondActivity::class.java).apply {
        putExtra("adat_kulcs", "adat_érték")
    }
    startActivity(intent)
    
    // A második Activity-ben (Kotlin)
    val adat = intent.getStringExtra("adat_kulcs")
    

A módszer kiválasztása az átadott adatok típusától és mennyiségétől, valamint a tartóssági követelményektől függ. Az adatok átadása Intent Extras-en keresztül a kis adatmennyiség és az Activity közötti közvetlen átmenet esetén a szabványos módszer.