Android Pasando datos entre actividades.


Ejemplo

Este ejemplo ilustra el envío de una String con valor como "Some data!" de OriginActivity a DestinationActivity .

NOTA: Esta es la forma más sencilla de enviar datos entre dos actividades. Vea el ejemplo sobre el uso del patrón de inicio para una implementación más robusta.

OrigenActividad

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

DestinoActividad

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

También es posible pasar otros primitive tipos de datos, así como arrays , Bundle y Parcelable datos. También es posible pasar a Serializable , pero debe evitarse ya que es más de tres veces más lento que Parcelable .

Serializable es una interface estándar de Java. Simplemente marque una clase como Serializable implementando la interface Serializable y Java lo serializará automáticamente durante las situaciones requeridas.

Parcelable es una interface específica de Android que puede implementarse en tipos de datos personalizados (es decir, sus propios objetos / objetos POJO), permite que su objeto se aplane y se reconstruya sin que el destino tenga que hacer nada. Hay un ejemplo de documentación de hacer un objeto parcelable .

Una vez que tenga un objeto parcelable , puede enviarlo como un tipo primitivo, con un objeto de intención:

intent.putExtra(DestinationActivity.EXTRA_DATA, myParcelableObject);

O en un paquete / como un argumento para un fragmento:

bundle.putParcelable(DestinationActivity.EXTRA_DATA, myParcelableObject);

y luego también leerlo desde la intención en el destino usando getParcelableExtra:

final MyParcelableType data = intent.getParcelableExtra(EXTRA_DATA); 

O al leer en un fragmento de un paquete:

final MyParcelableType data = bundle.getParcelable(EXTRA_DATA); 

Una vez que tenga un objeto Serializable , puede ponerlo en un objeto de intención:

bundle.putSerializable(DestinationActivity.EXTRA_DATA, mySerializableObject);

y luego léalo del objeto de intención en el destino como se muestra a continuación:

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