Comience 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. Muestro esa información Necesito un ID de juego.

¿Cómo puedo pasar esta identificación del juego a la actividad? La identificación del juego es absolutamente necesaria, por lo que no quiero crear o comenzar la actividad si no tiene la ID.

Es como si la actividad tuviera solo un constructor con un parámetro.

¿Cómo puedo hacer eso?

Gracias.

Pon un int que es tu 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(); 

A continuación, toma la identificación en tu nueva Activity :

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

Simplemente agregue datos adicionales a la intención que usa para llamar a su actividad.

En la actividad de la persona que llama:

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

Dentro de onCreate () de la actividad que llamas:

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

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

Me gusta hacerlo con un método estático en la segunda actividad:

 private static final String EXTRA_GAME_ID = "your.package.gameId"; public static void start(Context context, String gameId) { Intent intent = new Intent(context, SecondActivity.class); intent.putExtra(EXTRA_GAME_ID, gameId); context.startActivity(intent); } @Override protected void onCreate(Bundle savedInstanceState) { ... Intent intent = this.getIntent(); String gameId = intent.getStringExtra(EXTRA_GAME_ID); } 

Luego, desde su primera actividad (y para cualquier otro lugar), simplemente lo hace:

 SecondActivity.start(this, "the.game.id"); 

Las respuestas existentes (pasan los datos en el Intent pasado a startActivity() ) muestran la forma normal de resolver este problema. Hay otra solución que se puede usar en el caso extraño en el que esté creando una actividad que iniciará otra aplicación (por ejemplo, una de las actividades de edición en un complemento de Tasker ) y, por lo tanto, no controla la Intent que inicia el Activity .

Puede crear una Activity clase base que tenga un constructor con un parámetro, luego una clase derivada que tenga un constructor predeterminado 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 de función que devuelva el valor correcto para pasar.

Código de Kotlin:

Comience la SecondActivity :

 startActivity(Intent(context, SecondActivity::class.java) .putExtra(SecondActivity.PARAM_GAME_ID, gameId)) 

Obtenga el Id en SecondActivity :

 class CaptureActivity : AppCompatActivity() { companion object { const val PARAM_GAME_ID = "PARAM_GAME_ID" } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val gameId = intent.getStringExtra(PARAM_GAME_ID) // TODO use gameId } } 

donde gameId es String? (puede ser nulo)