Android Trasmissione dei dati tra le attività


Esempio

Questo esempio illustra l'invio di una String con valore come "Some data!" da OriginActivity a DestinationActivity .

NOTA: questo è il modo più semplice per inviare dati tra due attività. Vedere l'esempio sull'uso del pattern di partenza per un'implementazione più robusta.

OriginActivity

public class OriginActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_origin);
        
        // Create a new Intent object, containing DestinationActivity as target Activity.
        final Intent intent = new Intent(this, DestinationActivity.class);

        // Add data in the form of key/value pairs to the intent object by using putExtra()
        intent.putExtra(DestinationActivity.EXTRA_DATA, "Some data!");

        // Start the target Activity with the intent object
        startActivity(intent);
    }
} 

DestinationActivity

public class DestinationActivity extends AppCompatActivity {

    public static final String EXTRA_DATA = "EXTRA_DATA";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_destination);

        // getIntent() returns the Intent object which was used to start this Activity
        final Intent intent = getIntent();

        // Retrieve the data from the intent object by using the same key that
        // was previously used to add data to the intent object in OriginActivity.
        final String data = intent.getStringExtra(EXTRA_DATA);
    }
}

È anche possibile passare altri tipi di dati primitive oltre a arrays , dati Bundle e Parcelable . Passare Serializable è anche possibile, ma dovrebbe essere evitato in quanto è più di tre volte più lento di Parcelable .

Serializable è interface Java standard. Contrassegnare semplicemente una classe come Serializable implementando l' interface Serializable e Java la serializzerà automaticamente durante le situazioni richieste.

Parcelable è una specifica Android interface che può essere implementato su tipi di dati personalizzati (vale a dire i propri oggetti / oggetti POJO), consente l'oggetto sia appiattito e si ricostruiscono, senza la destinazione bisogno di fare nulla. C'è un esempio di documentazione per rendere un oggetto parcellizzabile .

Una volta che hai un oggetto parcelable puoi inviarlo come un tipo primitivo, con un oggetto intent:

intent.putExtra(DestinationActivity.EXTRA_DATA, myParcelableObject);

O in un pacchetto / come argomento per un frammento:

bundle.putParcelable(DestinationActivity.EXTRA_DATA, myParcelableObject);

e poi anche leggerlo dall'intenzione della destinazione usando getParcelableExtra:

final MyParcelableType data = intent.getParcelableExtra(EXTRA_DATA); 

O quando si legge in un frammento di un pacchetto:

final MyParcelableType data = bundle.getParcelable(EXTRA_DATA); 

Una volta che hai un oggetto Serializable puoi metterlo in un oggetto intent:

bundle.putSerializable(DestinationActivity.EXTRA_DATA, mySerializableObject);

e quindi anche leggerlo dall'oggetto intent alla destinazione come mostrato di seguito:

final SerializableType data = (SerializableType)bundle.getSerializable(EXTRA_DATA);