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. Muestro esa información. Necesito un ID de juego.
¿Cómo puedo pasar este ID del juego a la actividad? La ID del juego es absolutamente necesaria, por lo que no quiero crear ni iniciar la actividad si no tiene la ID.
Es como si la actividad tuviera un solo constructor con un parámetro.
¿Cómo puedo hacer eso?
Gracias.
Ponga int
cuál es su identificación 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();
Luego toma la identificación en tu nuevo Activity
:
Bundle b = getIntent().getExtras();
int value = -1; // or other values
if(b != null)
value = b.getInt("key");
Simplemente agregue datos adicionales al Intent 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 del onCreate() de la actividad que llamas:
Bundle b = getIntent().getExtras();
int id = b.getInt("id");
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 tu primera actividad (y para cualquier otra actividad), simplemente haz:
SecondActivity.start(this, "the.game.id");
Código Kotlin:
Iniciar el SecondActivity
:
startActivity(Intent(context, SecondActivity::class.java)
.putExtra(SecondActivity.PARAM_GAME_ID, gameId))
Obtenga la identificación 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
está String?
(puede ser nulo)
Las respuestas existentes (pase los datos pasados Intent
a startActivity()
) muestran la forma normal de resolver este problema. Existe otra solución que se puede utilizar en el impar caso de que estés creando una actividad que será iniciada por otra aplicación (por ejemplo, una de las actividades de edición en un complemento de Tasker ) y, por lo tanto, no controlas Intent
quién inicia el archivo Activity
.
Puedes crear una clase base Activity
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 pasarlo al constructor de la clase base, simplemente reemplace el valor codificado con una llamada de función que devuelva el valor correcto para pasar.