Sobes.tech
Junior

Hoe kun je gegevens van de ene Activity naar de andere in Android overdragen?

sobes.tech AI

Antwoord van AI

Er zijn verschillende manieren:

  1. Intent Extras: De meest gebruikelijke manier. Gegevens worden verpakt in een Bundle en toegevoegd aan de Intent.

    // In de eerste Activity
    Intent intent = new Intent(this, SecondActivity.class);
    intent.putExtra("sleutel", "waarde"); // Primitieve types
    intent.putExtra("object", new MySerializableObject()); // Serializable
    startActivity(intent);
    
    // In de tweede Activity
    Bundle extras = getIntent().getExtras();
    if (extras != null) {
        String waarde = extras.getString("sleutel");
        MySerializableObject object = (MySerializableObject) extras.getSerializable("object");
    }
    
  2. Parcelable Objecten: Vergelijkbaar met Serializable, maar efficiënter voor vaak overgedragen objecten. Vereist implementatie van de Parcelable interface.

    // In de eerste Activity
    Intent intent = new Intent(this, SecondActivity.class);
    intent.putExtra("parcelable_object", new MyParcelableObject());
    startActivity(intent);
    
    // In de tweede Activity
    Intent intent = getIntent();
    MyParcelableObject parcelableObject = intent.getParcelableExtra("parcelable_object");
    
  3. Shared Preferences: Geschikt voor het overdragen van kleine hoeveelheden gegevens die tussen app-starts bewaard moeten blijven.

    // In de eerste Activity
    SharedPreferences preferences = getSharedPreferences("mijn_prefs", MODE_PRIVATE);
    SharedPreferences.Editor editor = preferences.edit();
    editor.putString("sleutel", "waarde");
    editor.apply(); // of commit()
    
    // In de tweede Activity
    SharedPreferences preferences = getSharedPreferences("mijn_prefs", MODE_PRIVATE);
    String waarde = preferences.getString("sleutel", null); // null is de standaardwaarde
    
  4. Statische variabelen: Niet aanbevolen, omdat het de principes van OOP schendt en geheugenlekken kan veroorzaken. Gebruik het voorzichtig en alleen voor zeer eenvoudige gevallen.

    // In een statische klasse of andere toegankelijke statische variabele
    public static String statischeData;
    
    // In de eerste Activity
    StaticDataHolder.statischeData = "gegevens";
    
    // In de tweede Activity
    String gegevens = StaticDataHolder.statischeData;
    
  5. Database/Bestand: Voor grote hoeveelheden gegevens of gegevens die persistent moeten zijn. Gegevens worden opgeslagen in een database (SQLite, Room) of bestand en gelezen door de tweede Activity.

  6. ViewModel (samen met LiveData): In de context van architectuurcomponenten is ViewModel de voorkeursmethode voor het beheren van UI-gerelateerde gegevens. Gegevens tussen Activity's worden via een gedeeld ViewModel of via gebeurtenissen op LiveData doorgegeven.

    // In de eerste Activity (Kotlin)
    val intent = Intent(this, SecondActivity::class.java).apply {
        putExtra("gegevens_sleutel", "gegevens_waarde")
    }
    startActivity(intent)
    
    // In de tweede Activity (Kotlin)
    val gegevens = intent.getStringExtra("gegevens_sleutel")
    

De keuze van methode hangt af van het type en de omvang van de gegevens die worden overgedragen, evenals van de vereisten voor persistentie. Gegevensoverdracht via Intent Extras is de standaard voor kleine gegevenshoeveelheden en directe overgangen tussen Activity's.