Programación y Desarrollo para Android Subforo exclusivo para temas de programación de software para PDAs y desarrollo de aplicaciones, interfaces, etc bajo Android

Respuesta
 
Herramientas
  #1  
Viejo 26/11/15, 03:15:06
Array

[xs_avatar]
c2alvaro c2alvaro no está en línea
Miembro del foro
 
Fecha de registro: may 2015
Localización: Venezuela
Mensajes: 67
Modelo de smartphone: Galaxy S4 mini
Tu operador: Movistar
Programar el boton atras <-- de la actionBar

Saludos compañeros, acudo a uds con esta duda, el botón Atras o Home (<--) de la barra de titulo lo agregue solo colocando android:parentActivityName en el AndroidManfiest.xml y listo..! ya puedo navegar hacia atrás sin hacer más nada, ahora este es el problema, cuando se oprime este botón para volver a la actividad anterior el android hace lo siguiente en la actividad anterior (onDestroy, onCreate, onStart, onResume) lo que necesito hacer es cambiar esta lógica y quisiera que se llamara a la actividad anterior de esta manera (onRestart, onStart, onResumen) se puede hacer eso?

El problema es porque la actividad padre en onCreate usa un intent que recibe desde la actividad principal, ahora bien cuando la actividad padre llama a su actividad hija y esta quiere regresar a su actividad padre usando el botón atrás de la barra de título da un error y es porque se destruye la actividad padre y por supuesto que el intent ya no tiene datos, es por eso que quiero que el botón atrás de la barra de título no destruya la actividad padre si no que la restaure. Una vez mas gracias por sus comentarios
Responder Con Cita


  #2  
Viejo 26/11/15, 08:11:43
Array

[xs_avatar]
kriogeN kriogeN no está en línea
Colaborador/a
· Votos compra/venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Tu operador: Vodafone
Así funciona el parentActivityName, se crea una nueva instancia de la Activity, no se mantiene la anterior.

De todas formas no entiendo esta moda, con lo fácil que es poner un "finish()" en el onOptionsItemSelected. Además de mucho más escalable, ya que puedo tener a la misma Activity llamándola desde 10 sitios distintos y volver siempre a la verdadera Activity anterior, y no a la indicada en el Manifest. Que para una cosa buena que tenemos en Android frente a iOS que es no utilizar los Segues ahora parece que queremos también usarlos.

Puedes probar cambiando el launchMode a "singleTask" o "singleInstance", pero no te garantizo tampoco que te mantenga el Intent.
Responder Con Cita
  #3  
Viejo 26/11/15, 11:12:50
Array

[xs_avatar]
Dexafree Dexafree no está en línea
Mr. FAQMan
· Votos compra/venta: (1)
 
Fecha de registro: dic 2008
Mensajes: 8,021
Modelo de smartphone: Samsung Galaxy S i9000 + Galaxy Tab 10.1 WiFi
Tu operador: Movistar
 Cita: Originalmente Escrito por kriogeN Ver Mensaje
con lo fácil que es poner un "finish()" en el onOptionsItemSelected
Como aportacion, tienes que buscar el que el itemId sea android.R.id.home

Por lo demás, opino como tu, siempre pongo un finish() y vuelvo a la instancia anterior
Responder Con Cita
  #4  
Viejo 26/11/15, 11:38:27
Array

[xs_avatar]
kriogeN kriogeN no está en línea
Colaborador/a
· Votos compra/venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Tu operador: Vodafone
 Cita: Originalmente Escrito por Dexafree Ver Mensaje
Como aportacion, tienes que buscar el que el itemId sea android.R.id.home
Ya, claro, eso lo he dado por supuesto D
Responder Con Cita
  #5  
Viejo 26/11/15, 19:36:27
Array

[xs_avatar]
c2alvaro c2alvaro no está en línea
Miembro del foro
 
Fecha de registro: may 2015
Localización: Venezuela
Mensajes: 67
Modelo de smartphone: Galaxy S4 mini
Tu operador: Movistar
 Cita: Originalmente Escrito por kriogeN Ver Mensaje
Así funciona el parentActivityName, se crea una nueva instancia de la Activity, no se mantiene la anterior.

De todas formas no entiendo esta moda, con lo fácil que es poner un "finish()" en el onOptionsItemSelected. Además de mucho más escalable, ya que puedo tener a la misma Activity llamándola desde 10 sitios distintos y volver siempre a la verdadera Activity anterior, y no a la indicada en el Manifest. Que para una cosa buena que tenemos en Android frente a iOS que es no utilizar los Segues ahora parece que queremos también usarlos.

Puedes probar cambiando el launchMode a "singleTask" o "singleInstance", pero no te garantizo tampoco que te mantenga el Intent.
Saludos amigo kriogen y gracias por tu respuesta, lo que entiendo es que no use el parentActivityName en el manifest y que ponga el boton atras de forma manual en la barra de titulo y programa su comportamiento desde el onOptionsItemSelected ?
Responder Con Cita
  #6  
Viejo 26/11/15, 19:52:54
Array

[xs_avatar]
kriogeN kriogeN no está en línea
Colaborador/a
· Votos compra/venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Tu operador: Vodafone
 Cita: Originalmente Escrito por c2alvaro Ver Mensaje
Saludos amigo kriogen y gracias por tu respuesta, lo que entiendo es que no use el parentActivityName en el manifest y que ponga el boton atras de forma manual en la barra de titulo y programa su comportamiento desde el onOptionsItemSelected ?
Así es como lo hago yo y no debe fallarte, en el 90% de los casos la Activity no se tendrá que reconstruir, y en el 10% restante recibirá el mismo Intent que le enviaste originalmente, por lo tanto se creará con los mismos Extras.

Como te he dicho puedes probar a usar un singleTask o singleInstance, así a lo mejor la Activity no se vuelve a crear, aunque en el fondo es una chapuza, no están pensadas para eso. Vuelvo a repetir lo mismo que he dicho antes de iOS, al abusar de los singleTask y singleInstance tienes una arquitectura StoryBoard de iOS.

También como la Activity hace todo el ciclo, es decir, se destruye y se vuelve a crear, a lo mejor almacenar campos en el onSavedInstanceState los recupera en la reconstrucción, pero en teoría es una Activity nueva y no debería ser así, pero por probar no pierdes nada.
Responder Con Cita
  #7  
Viejo 26/11/15, 21:47:55
Array

[xs_avatar]
c2alvaro c2alvaro no está en línea
Miembro del foro
 
Fecha de registro: may 2015
Localización: Venezuela
Mensajes: 67
Modelo de smartphone: Galaxy S4 mini
Tu operador: Movistar
 Cita: Originalmente Escrito por kriogeN Ver Mensaje
Así es como lo hago yo y no debe fallarte, en el 90% de los casos la Activity no se tendrá que reconstruir, y en el 10% restante recibirá el mismo Intent que le enviaste originalmente, por lo tanto se creará con los mismos Extras.

Como te he dicho puedes probar a usar un singleTask o singleInstance, así a lo mejor la Activity no se vuelve a crear, aunque en el fondo es una chapuza, no están pensadas para eso. Vuelvo a repetir lo mismo que he dicho antes de iOS, al abusar de los singleTask y singleInstance tienes una arquitectura StoryBoard de iOS.

También como la Activity hace todo el ciclo, es decir, se destruye y se vuelve a crear, a lo mejor almacenar campos en el onSavedInstanceState los recupera en la reconstrucción, pero en teoría es una Activity nueva y no debería ser así, pero por probar no pierdes nada.
Ok entendido amigo Kriogen, quite el android:parentActivityName del manifest y ahora quiero agregar manualmene el boton atras con su imagen (<--) busque por ahi y enconte que solo colocar esta linea
getSupportActionBar().setDisplayHomeAsUpEnabled(tr ue);en el onCreate de las actividades hijo haria que se muestre el boton atras, pero al ejecutar da un error de nullpointExecption es como si no encontrara una barra de titulo? como muestro ahora el boton atras?

mi app tiene el estilo
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">y las actividades extienden de

public class Main2Activity extends AppCompatActivity y como sdk min y maxi tengo
minSdkVersion 15
targetSdkVersion 22Gracias por tus comentarios y disculpa las molestias...
Responder Con Cita
  #8  
Viejo 26/11/15, 21:58:01
Array

[xs_avatar]
kriogeN kriogeN no está en línea
Colaborador/a
· Votos compra/venta: (1)
 
Fecha de registro: oct 2010
Localización: Murcia
Mensajes: 4,637
Modelo de smartphone: Samsung Galaxy S7 Edge SM-G935F
Tu operador: Vodafone
Si usas el AppCompat las Actionbar ya no existen como tal, tienes que crear una Toolbar y asignarla como Actionbar.

[PHP]
Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

getSupportActionBar().setDisplayHomeAsUpEnabled(tr ue);
getSupportActionBar().setHomeButtonEnabled(true);[/PHP]

Y en el layout deberías tener algo parecido a esto en la parte superior:

[PHP]<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:layout_alignParentTop="true" />[/PHP]

También debes usar el NoActionbar como Parent en el Theme.

Última edición por kriogeN Día 26/11/15 a las 22:00:20.
Responder Con Cita
  #9  
Viejo 27/11/15, 14:00:21
Array

[xs_avatar]
c2alvaro c2alvaro no está en línea
Miembro del foro
 
Fecha de registro: may 2015
Localización: Venezuela
Mensajes: 67
Modelo de smartphone: Galaxy S4 mini
Tu operador: Movistar
 Cita: Originalmente Escrito por kriogeN Ver Mensaje
Si usas el AppCompat las Actionbar ya no existen como tal, tienes que crear una Toolbar y asignarla como Actionbar.

[php]
Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

getSupportActionBar().setDisplayHomeAsUpEnabled(tr ue);
getSupportActionBar().setHomeButtonEnabled(true);[/php]Y en el layout deberías tener algo parecido a esto en la parte superior:

[php]<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:layout_alignParentTop="true" />[/php]También debes usar el NoActionbar como Parent en el Theme.
Gracias amigo kriogen, como siempre muy utiles tus comentarios
Responder Con Cita
Respuesta

Estás aquí
Regresar   Portal | Indice > Todo sobre Android > Programación y Desarrollo para Android



Hora actual: 00:17:57 (GMT +1)



User Alert System provided by Advanced User Tagging (Lite) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.

Contactar por correo / Contact by mail / 邮件联系 /