2012-02-10 26 views
15

iniciar una actividad que necesita un Intento, como:uso del contexto para iniciar otra actividad

Intent i = new Intent(context, class) 

Así que para rellenar el parámetro de contexto, un par de opciones están disponibles:

  • Uso MyActivity.this o simplemente this
  • uso getApplicationContext()
  • uso getBaseContext()

Y estoy seguro de que hay una o dos opciones más. Todas estas opciones aparecen en algún tipo de tutorial, una usa la primera, la siguiente usa la tercera opción.

Entonces, ¿cuál debo usar? ¿Incluso importa? ¿Es diferente para diferentes casos?

Respuesta

14

Sí, es diferente para casos diferentes,

Depende del alcance. Supongamos que si está creando un método en una clase global que extendsApplication para crear un Toast que se usa en todas las clases de su Application, puede usar getApplicationContext() para crearlo.

Si desea crear una vista que se restringe a esa actividad en particular puede utilizar Activity.this

Además, si desea crear un AlertDialog de alguna clase interna decir AsyncTask, entonces usted tiene que utilizar Activity.this, debido a que la AlertDialog se debe vincular al Activity.

Además, no use getBaseContext() simplemente use el Context que tenga. Para obtener más información sobre el mismo, puede ver this Answer.

Por lo tanto, la respuesta a la pregunta real es mejor utilizar Activity.this para iniciar un nuevo Activity.

Intent intent = new Intent(Current_Activity.this, Calling.class); 
startActivity(intent); 
-1

Lo haces como esto ....

Intent intent = new Intent(); 
intent.setClass(MainActivity.this, SecondActivity.class); 
startActivity(intent); 
+0

supongo OP sabe que SmartLemon :) –

+0

Por favor, lea toda la cuestión antes de responder, no sólo las primeras palabras (?) :) – nhaarman

+0

He leído todo el asunto, se responde a la pregunta, se utiliza Actividad .este como se muestra arriba. – FabianCook

4

son diferentes a ciencia cierta. Estos son contextos diferentes y deben usarse con el menor alcance posible (contexto).

Por ejemplo, si podemos usar el contexto de la actividad en lugar de ApplicationContext, uno debe usar el contexto de la actividad, lo mismo se aplica al contexto de la aplicación y al contexto base.

+1

Es cierto, pero no para 'getBaseContext'. 'getBaseContext' es un método de la clase' ContextWrapper'. El desarrollador no puede saber con precisión qué contexto está envuelto con él. – Olegas

+0

Esto tiene sentido, pero tengo curiosidad sobre el "por qué" de esta máxima. ¿Y hay una diferencia funcional entre comenzar una actividad de otra actividad o contexto de la aplicación? –

Cuestiones relacionadas