Android Transmission de données entre activités


Exemple

Cet exemple illustre l'envoi d'une String avec la valeur "Some data!" de OriginActivity à DestinationActivity .

REMARQUE: C'est le moyen le plus simple d'envoyer des données entre deux activités. Voir l'exemple d'utilisation du modèle de démarrage pour une implémentation plus robuste.

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);
    }
}

Il est également possible de passer d' autres primitive types de données, ainsi que arrays , Bundle et Parcelable données. Passer Serializable est également possible, mais devrait être évité car il est plus de trois fois plus lent que Parcelable .

Serializable est une interface Java interface . Vous marquez simplement une classe comme Serializable en implémentant l' interface Serializable et Java le sérialisera automatiquement lors des situations requises.

Parcelable est une interface spécifique à Android qui peut être implémentée sur des types de données personnalisés (c.-à-d. Vos propres objets / objets POJO), elle permet d'aplatir votre objet et de se reconstruire sans que la destination ait besoin de faire quoi que ce soit. Il existe un exemple de documentation permettant de rendre un objet parcelable .

Une fois que vous avez un objet parcelable , vous pouvez l'envoyer comme un type primitif, avec un objet intentionnel:

intent.putExtra(DestinationActivity.EXTRA_DATA, myParcelableObject);

Ou dans un bundle / comme argument pour un fragment:

bundle.putParcelable(DestinationActivity.EXTRA_DATA, myParcelableObject);

puis lisez-le également à l’intention de destination à l’aide de getParcelableExtra:

final MyParcelableType data = intent.getParcelableExtra(EXTRA_DATA); 

Ou lors de la lecture d'un fragment d'un bundle:

final MyParcelableType data = bundle.getParcelable(EXTRA_DATA); 

Une fois que vous avez un objet Serializable , vous pouvez le placer dans un objet intentionnel:

bundle.putSerializable(DestinationActivity.EXTRA_DATA, mySerializableObject);

puis lisez-le également à partir de l'objet intentionnel à la destination, comme indiqué ci-dessous:

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