Sobes.tech
Junior

Jak předat data z jedné Activity do druhé v Androidu?

sobes.tech AI

Odpověď od AI

Existuje několik způsobů:

  1. Intent Extras: Nejčastější způsob. Data jsou zabalená do Bundle a přidána k Intent.

    // V první Activity
    Intent intent = new Intent(this, SecondActivity.class);
    intent.putExtra("klíč", "hodnota"); // Primitivní typy
    intent.putExtra("objekt", new MySerializableObject()); // Serializable
    startActivity(intent);
    
    // Ve druhé Activity
    Bundle extras = getIntent().getExtras();
    if (extras != null) {
        String hodnota = extras.getString("klíč");
        MySerializableObject objekt = (MySerializableObject) extras.getSerializable("objekt");
    }
    
  2. Parcelable objekty: Podobně jako Serializable, ale výkonnější pro objekty, které je třeba často přenášet. Vyžaduje implementaci rozhraní Parcelable.

    // V první Activity
    Intent intent = new Intent(this, SecondActivity.class);
    intent.putExtra("parcelable_objekt", new MyParcelableObject());
    startActivity(intent);
    
    // Ve druhé Activity
    Intent intent = getIntent();
    MyParcelableObject parcelableObjekt = intent.getParcelableExtra("parcelable_objekt");
    
  3. Shared Preferences: Vhodné pro přenos malých objemů dat, která mají být zachována mezi spuštěními aplikace.

    // V první Activity
    SharedPreferences preferences = getSharedPreferences("my_prefs", MODE_PRIVATE);
    SharedPreferences.Editor editor = preferences.edit();
    editor.putString("klíč", "hodnota");
    editor.apply(); // nebo commit()
    
    // Ve druhé Activity
    SharedPreferences preferences = getSharedPreferences("my_prefs", MODE_PRIVATE);
    String hodnota = preferences.getString("klíč", null); // null je výchozí hodnota
    
  4. Statické proměnné: Nedoporučuje se, protože porušuje principy OOP a může vést k únikům paměti. Používejte opatrně a pouze pro velmi jednoduché případy.

    // Ve statické třídě nebo jiné dostupné statické proměnné
    public static String staticData;
    
    // V první Activity
    StaticDataHolder.staticData = "data";
    
    // Ve druhé Activity
    String data = StaticDataHolder.staticData;
    
  5. Databáze/Soubor: Pro větší objemy dat nebo data, která mají být perzistentní. Data jsou uložena v databázi (SQLite, Room) nebo souboru, a druhá Activity je čte.

  6. ViewModel (spolu s LiveData): V kontextu architektonických komponent je ViewModel preferovaným způsobem správy dat UI-vázané logiky. Data mezi Activity jsou přenášena přes sdílený ViewModel nebo přes události na LiveData.

    // V první Activity (Kotlin)
    val intent = Intent(this, SecondActivity::class.java).apply {
        putExtra("data_key", "data_value")
    }
    startActivity(intent)
    
    // Ve druhé Activity (Kotlin)
    val data = intent.getStringExtra("data_key")
    

Volba metody závisí na typu a objemu přenášených dat, stejně jako na požadavcích na perzistenci. Přenos dat přes Intent Extras je standardem pro malé objemy dat a při přímém přechodu mezi Activity.