Sobes.tech
Junior

Come trasferire i dati da una Activity all'altra in Android?

sobes.tech AI

Risposta dell'AI

Esistono diversi metodi:

  1. Extras di Intent: Il metodo più comune. I dati vengono impacchettati in un Bundle e aggiunti all'Intent.

    // Nella prima Activity
    Intent intent = new Intent(this, SecondActivity.class);
    intent.putExtra("chiave", "valore"); // Tipi primitivi
    intent.putExtra("oggetto", new MySerializableObject()); // Serializable
    startActivity(intent);
    
    // Nella seconda Activity
    Bundle extras = getIntent().getExtras();
    if (extras != null) {
        String valore = extras.getString("chiave");
        MySerializableObject oggetto = (MySerializableObject) extras.getSerializable("oggetto");
    }
    
  2. Oggetti Parcelable: Simile a Serializable, ma più efficiente per oggetti trasmessi frequentemente. Richiede l'implementazione dell'interfaccia Parcelable.

    // Nella prima Activity
    Intent intent = new Intent(this, SecondActivity.class);
    intent.putExtra("oggetto_parcelable", new MyParcelableObject());
    startActivity(intent);
    
    // Nella seconda Activity
    Intent intent = getIntent();
    MyParcelableObject oggettoParcelable = intent.getParcelableExtra("oggetto_parcelable");
    
  3. Shared Preferences: Adatto per piccoli volumi di dati che devono persistere tra le esecuzioni dell'app.

    // Nella prima Activity
    SharedPreferences preferences = getSharedPreferences("mie_prefs", MODE_PRIVATE);
    SharedPreferences.Editor editor = preferences.edit();
    editor.putString("chiave", "valore");
    editor.apply(); // o commit()
    
    // Nella seconda Activity
    SharedPreferences preferences = getSharedPreferences("mie_prefs", MODE_PRIVATE);
    String valore = preferences.getString("chiave", null); // null è il valore di default
    
  4. Variabili statiche: Non raccomandato, poiché viola i principi di OOP e può portare a perdite di memoria. Usare con cautela e solo per casi molto semplici.

    // In una classe statica o altra variabile statica accessibile
    public static String datiStatici;
    
    // Nella prima Activity
    StaticDataHolder.datiStatici = "dati";
    
    // Nella seconda Activity
    String dati = StaticDataHolder.datiStatici;
    
  5. Database/File: Per grandi volumi di dati o dati che devono essere persistenti. I dati vengono salvati in un database (SQLite, Room) o in un file, e la seconda Activity li legge.

  6. ViewModel (con LiveData): Nel contesto dei componenti architetturali, ViewModel è il metodo preferito per gestire i dati e la logica relativi all'UI. I dati tra Activity vengono trasmessi tramite un ViewModel condiviso o tramite eventi su LiveData.

    // Nella prima Activity (Kotlin)
    val intent = Intent(this, SecondActivity::class.java).apply {
        putExtra("chiave_dati", "valore_dati")
    }
    startActivity(intent)
    
    // Nella seconda Activity (Kotlin)
    val dati = intent.getStringExtra("chiave_dati")
    

La scelta del metodo dipende dal tipo e dalla quantità di dati trasmessi, nonché dai requisiti di persistenza. La trasmissione dei dati tramite Intent Extras è lo standard per piccoli volumi di dati e transizioni dirette tra Activity.