Sobes.tech
Junior

Kako preneti podatke iz jedne Activity u drugu u Androidu?

sobes.tech АИ

Одговор од АИ

Postoji nekoliko načina:

  1. Intent Extras: Najčešći način. Podaci se paketuju u Bundle i dodaju se u Intent.

    // U prvoj Activity
    Intent intent = new Intent(this, SecondActivity.class);
    intent.putExtra("ključ", "vrednost"); // Primitivni tipovi
    intent.putExtra("objekat", new MySerializableObject()); // Serializable
    startActivity(intent);
    
    // U drugoj Activity
    Bundle extras = getIntent().getExtras();
    if (extras != null) {
        String vrednost = extras.getString("ključ");
        MySerializableObject objekat = (MySerializableObject) extras.getSerializable("objekat");
    }
    
  2. Parcelable objekti: Slično Serializable, ali efikasnije za objekte koje je potrebno često prenositi. Zahteva implementaciju interfejsa Parcelable.

    // U prvoj Activity
    Intent intent = new Intent(this, SecondActivity.class);
    intent.putExtra("parcelable_objekat", new MyParcelableObject());
    startActivity(intent);
    
    // U drugoj Activity
    Intent intent = getIntent();
    MyParcelableObject parcelableObjekat = intent.getParcelableExtra("parcelable_objekat");
    
  3. Shared Preferences: Pogodno za prenos malih količina podataka koje treba sačuvati između pokretanja aplikacije.

    // U prvoj Activity
    SharedPreferences preferences = getSharedPreferences("my_prefs", MODE_PRIVATE);
    SharedPreferences.Editor editor = preferences.edit();
    editor.putString("ključ", "vrednost");
    editor.apply(); // ili commit()
    
    // U drugoj Activity
    SharedPreferences preferences = getSharedPreferences("my_prefs", MODE_PRIVATE);
    String vrednost = preferences.getString("ključ", null); // null je podrazumevana vrednost
    
  4. Staticke promenljive: Ne preporučuje se, jer narušava principe OOP i može dovesti do curenja memorije. Koristite sa oprezom i samo za veoma jednostavne slučajeve.

    // U statičkoj klasi ili bilo kojoj drugoj dostupnoj statičkoj promenljivoj
    public static String staticData;
    
    // U prvoj Activity
    StaticDataHolder.staticData = "podatak";
    
    // U drugoj Activity
    String podaci = StaticDataHolder.staticData;
    
  5. Baza podataka/Fajl: Za veće količine podataka ili podatke koji moraju biti perzistentni. Podaci se čuvaju u bazi podataka (SQLite, Room) ili fajlu, a druga Activity ih čita.

  6. ViewModel (zajedno sa LiveData): U okviru arhitektonskih komponenti, ViewModel je preferirani način upravljanja podacima UI-jem. Podaci između Activity se prenose putem shared ViewModel ili putem događaja na LiveData.

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

Izbor metode zavisi od tipa i obima prenesenih podataka, kao i od zahteva za perzistencijom. Prenos podataka putem Intent Extras je standard za manje količine podataka i pri direktnom prelazu između Activity.