Iniciar una actividad con un parámetro

Soy muy nuevo en el desarrollo de Android.

Quiero crear e iniciar una actividad para mostrar información sobre un juego. Para mostrar esa información necesito un gameId.

¿Cómo puedo pasar este ID del juego a la actividad? El ID del juego es absolutamente necesario, así que no quiero crear o iniciar la actividad si no tiene el ID.

Es como si la actividad tuviera sólo un constructor con un parámetro.

¿Cómo puedo hacerlo?

Gracias.

Solución

Poner un int que es su id en el nuevo Intent.

Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
Bundle b = new Bundle();
b.putInt("key", 1); //Your id
intent.putExtras(b); //Put your id to your next Intent
startActivity(intent);
finish();

Entonces coge el id en tu nueva Actividad:

Bundle b = getIntent().getExtras();
int value = -1; // or other values
if(b != null)
    value = b.getInt("key");
Comentarios (7)

Sólo tiene que añadir datos adicionales a la intención que utiliza para llamar a su actividad.

En la actividad de llamada:

Intent i = new Intent(this, TheNextActivity.class);
i.putExtra("id", id);
startActivity(i);

Dentro del onCreate() de la actividad que llama:

Bundle b = getIntent().getExtras();
int id = b.getInt("id");

Editar : Oops, Charlie Sheen fue más rápido.

Comentarios (3)

Las respuestas existentes (pasar los datos en el Intent pasado a startActivity()) muestran la forma normal de resolver este problema. Hay otra solución que se puede utilizar en el extraño caso de que se cree una actividad que será iniciada por otra aplicación (por ejemplo, una de las actividades de edición en un plugin Tasker) y por lo tanto no se controla el Intent que lanza la Activity.

Puedes crear una clase base Activity que tenga un constructor con un parámetro, y luego una clase derivada que tenga un constructor por defecto que llame al constructor de la clase base con un valor, así:

class BaseActivity extends Activity
{
    public BaseActivity(String param)
    {
        // Do something with param
    }
}

class DerivedActivity extends BaseActivity
{
    public DerivedActivity()
    {
        super("parameter");
    }
}

Si necesita generar el parámetro para pasar al constructor de la clase base, simplemente reemplace el valor codificado con una llamada a la función que devuelve el valor correcto para pasar.

Comentarios (0)