Iniciar una actividad con un parámetro

Resuelto VansFannel asked hace 54 años • 5 respuestas

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.

VansFannel avatar Jan 01 '70 08:01 VansFannel
Aceptado

Ponga intcuá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");
Wroclai avatar Oct 12 '2010 10:10 Wroclai

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");
DavGin avatar Oct 12 '2010 10:10 DavGin

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");
pomber avatar Mar 05 '2015 16:03 pomber

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 gameIdestá String? (puede ser nulo)

Francis avatar Aug 13 '2018 11:08 Francis

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 Intentquién inicia el archivo Activity.

Puedes crear una clase base Activityque 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.

Trebor Rude avatar Aug 27 '2014 01:08 Trebor Rude