Tengo dos actividades con el "menú de navegación" que tiene elementos para iniciar Activity1 y Activity2. Por ejemplo, iniciamos Activity2 desde Activity1 y luego queremos abrir Activity1 tocando en "navigation menu", pero cuando hacemos esto obtenemos una nueva instancia de Activity1 en lugar de abrir una instancia existente. ¿Cómo puedo abrir una instancia de Activity1 si ya existe y crear una nueva instancia si no?¿Cómo abrir una actividad ya abierta en lugar de crear una nueva?
Respuesta
Añadir FLAG_ACTIVITY_REORDER_TO_FRONT
a su Intent
que usa con startActivity()
.
Establezca el indicador de la actividad en singleTask
y anule el onNewIntent(Intent intent)
para captar el nuevo intento.
añadir android:launchMode="singleTop"
a su actividad en el Manifest.xml
<activity android:name=".myActivity" android:label="@string/app_name"
android:launchMode="singleTop" />
Comprobar this a cabo sobre diferentes launchModes también la mente esto:
Como se muestra en la tabla anterior, el estándar es el modo por defecto y es apropiado para la mayoría de los tipos de actividades. SingleTop también es un común y un modo de inicio útil para muchos tipos de actividades. Los otros modos - singleTask y SingleInstance - no son apropiados para la mayoría de aplicaciones, ya que dan lugar a un modelo de interacción que es probable a ser desconocido para los usuarios y es muy diferente de la mayoría de los otros aplicaciones
La respuesta más completa sería utilizar android:launchMode="singleTask"
y dependiendo de su funcionalidad, anular onNewIntent ya que se llamará si ya existe una instancia de la Activity
con el nuevo Intención que se le pasa.
<activity
android:name=".MainActivity"
android:launchMode="singleTask"/>
¿Por qué?
Basado en la pregunta. Hay dos actividades, Activity1 & Actividad2
Abrimos Actividad1 y luego desde Actividad1 abrimos Actividad2. Luego, en el interior Actividad2:
¿Cómo puedo abrir instancia de Actividad1 si ya existe y crear nueva instancia si no?
Como se indica en AndroidManifestActivity_launchMode para singleTask
Si, al iniciar la actividad, ya existe una ejecución de tareas que se inicia con esta actividad, a continuación, en lugar de iniciar una nueva instancia de la tarea actual se lleva a El frente. La instancia existente recibirá una llamada a Activity.onNewIntent() con ...
Por otra parte, en la clase de intención, si usted lee acerca de la singleTask launchMode
que ya utiliza Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT
y establecer manualmente la intención de que no se ajusta normalmente mediante código de la aplicación.
Como se indica en FLAG_ACTIVITY_BROUGHT_TO_FRONT
int FLAG_ACTIVITY_BROUGHT_TO_FRONT Este indicador normalmente no está establecido por el código de aplicación, pero fija para usted por el sistema como se describe en la documentación launchMode para el modo singleTask.
Por lo tanto, mediante el uso de singleTask launchMode
que asegurarse de que sólo hay una instancia de su aplicación y que no tiene que ser la adición de la bandera FLAG_ACTIVITY_BROUGHT_TO_FRONT
a sus intentos en cada actividad que exige su Actividad2 según lo sugerido por CommonsWare.
Ahora, si usamos el android:launchMode="singleTop"
como weakwire sugerido, el link que él mismo proporcionó claramente indica;
"singleTop" ... En otras circunstancias - por ejemplo, si una instancia existente de la actividad "singleTop" se encuentra en la tarea de destino, pero no en la parte superior de la pila, o si es en la parte superior de una pila, pero no en la tarea objetivo: se crearía una nueva instancia y se insertaría en la pila.
En otras palabras, podríamos terminar con varias instancias de Actividad1 en algunos escenarios que es lo que no queremos.
Como último recurso, si usted es uno de los que ama las respuestas de edición que no contribuyen en nada a la respuesta misma, responda algunas preguntas reales si realmente desea aumentar su Reputación de desbordamiento de pila.
- 1. Volver a una aplicación ya abierta cuando un usuario intenta abrir una nueva instancia
- 2. Android - Crear una nueva actividad en Eclipse
- 3. ¿Cómo abrir el enlace de WebView a una nueva actividad?
- 4. página abierta GWT en una nueva pestaña
- 5. Cancelar una tostada ya abierta en Android
- 6. Agregar contenido a una nueva ventana abierta
- 7. Eclipse: crear nueva actividad
- 8. GVim: Abrir en una nueva pestaña
- 9. Android- Abrir nueva actividad en clickview clics
- 10. Firefox ¿Abrir una nueva pestaña en lugar de una ventana emergente?
- 11. ¿Cómo registrar una nueva actividad en AndroidManifest.xml?
- 12. cómo abrir una nueva pantalla en Android?
- 13. selenio WebDriver: Abrir nueva pestaña en lugar de una nueva ventana
- 14. Abrir enlace en una nueva ventana o enfocar si ya está abierto
- 15. Crear un botón de tweet sin abrir una nueva ventana
- 16. cómo crear una nueva variante en bjam
- 17. ¿Cómo abrir una actividad en una ventana emergente?
- 18. cambiar la URL de una ventana emergente ya abierta
- 19. Cómo abrir en una ventana nueva usando el control WebBrowser?
- 20. JavaScript: ¿Forzar IE a abrir una pestaña nueva en lugar de una ventana?
- 21. ¿Cómo crear una nueva carpeta?
- 22. Abrir la imagen en una nueva ventana
- 23. enlaces ajax Abrir en una nueva pestaña
- 24. ¿Cómo abrir una nueva ventana en Windows Forms en .NET?
- 25. Abrir respuesta en una nueva ventana
- 26. Eclipse: Abrir en una nueva ventana
- 27. Diálogo de progreso en la actividad abierta
- 28. Cómo crear una actividad transparente SIN windowIsFloating
- 29. Android - Cómo iniciar una nueva actividad desde una instancia
- 30. abrir una nueva ventana en a4j: commandButton
Gracias! Funciona como yo quería)) – TFR
Pero al usar esto, ¿no se llama al método oncreate()? ¿Qué hacer si quiero actualizar la actividad con los nuevos datos que se le pasan? Onresume() está ahí, pero ¿hay alguna otra forma de hacer lo mismo? –
@ JD.com: Se debe llamar a 'onCreate() 'o' onNewIntent() 'en cualquier caso. – CommonsWare