Sobes.tech
Junior

Ako preniesť údaje z jednej Activity do druhej v Android?

sobes.tech AI

Odpoveď od AI

Existuje niekoľko spôsobov:

  1. Intent Extras: Najbežnejší spôsob. Dáta sa balia do Bundle a pridávajú sa k Intent.

    // V prvej Activity
    Intent intent = new Intent(this, SecondActivity.class);
    intent.putExtra("kľúč", "hodnota"); // Primitívne typy
    intent.putExtra("objekt", new MySerializableObject()); // Serializable
    startActivity(intent);
    
    // V druhej Activity
    Bundle extras = getIntent().getExtras();
    if (extras != null) {
        String hodnota = extras.getString("kľúč");
        MySerializableObject objekt = (MySerializableObject) extras.getSerializable("objekt");
    }
    
  2. Parcelable objekty: Podobne ako Serializable, ale efektívnejšie pre objekty, ktoré je potrebné často prenášať. Vyžaduje implementáciu rozhrania Parcelable.

    // V prvej Activity
    Intent intent = new Intent(this, SecondActivity.class);
    intent.putExtra("parcelable_objekt", new MyParcelableObject());
    startActivity(intent);
    
    // V druhej Activity
    Intent intent = getIntent();
    MyParcelableObject parcelableObjekt = intent.getParcelableExtra("parcelable_objekt");
    
  3. Shared Preferences: Vhodné na prenos malých objemov dát, ktoré majú byť zachované medzi spusteniami aplikácie.

    // V prvej Activity
    SharedPreferences preferences = getSharedPreferences("my_prefs", MODE_PRIVATE);
    SharedPreferences.Editor editor = preferences.edit();
    editor.putString("kľúč", "hodnota");
    editor.apply(); // alebo commit()
    
    // V druhej Activity
    SharedPreferences preferences = getSharedPreferences("my_prefs", MODE_PRIVATE);
    String hodnota = preferences.getString("kľúč", null); // null je predvolená hodnota
    
  4. Statické premenné: Neodporúča sa, pretože narušuje princípy OOP a môže viesť k únikom pamäte. Používajte s opatrnosťou a len pre veľmi jednoduché prípady.

    // V statickej triede alebo inej dostupnej statickej premennej
    public static String staticData;
    
    // V prvej Activity
    StaticDataHolder.staticData = "údaje";
    
    // V druhej Activity
    String údaje = StaticDataHolder.staticData;
    
  5. Databáza/Súbor: Pre väčšie objemy dát alebo dáta, ktoré musia byť perzistentné. Dáta sa ukladajú do databázy (SQLite, Room) alebo súboru a druhá Activity ich číta.

  6. ViewModel (spolu s LiveData): V kontexte architektonických komponentov je ViewModel preferovaným spôsobom správy dát UI-viaženej logiky. Dáta medzi Activity sa prenášajú cez shared ViewModel alebo cez udalosti na LiveData.

    // V prvej Activity (Kotlin)
    val intent = Intent(this, SecondActivity::class.java).apply {
        putExtra("data_key", "data_value")
    }
    startActivity(intent)
    
    // V druhej Activity (Kotlin)
    val data = intent.getStringExtra("data_key")
    

Výber spôsobu závisí od typu a objemu prenášaných dát, ako aj od požiadaviek na perzistenciu. Prenos dát cez Intent Extras je štandardom pre malé objemy dát a pri priamom prechode medzi Activity.