Ver la Versión Completa : [ CONSULTA ] Programar el boton atras <-- de la actionBar
c2alvaro
26/11/15, 03:15:06
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
kriogeN
26/11/15, 08:11:43
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.
Dexafree
26/11/15, 11:12:50
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
kriogeN
26/11/15, 11:38:27
Como aportacion, tienes que buscar el que el itemId sea android.R.id.home
Ya, claro, eso lo he dado por supuesto xDD
c2alvaro
26/11/15, 19:36:27
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 ?
kriogeN
26/11/15, 19:52:54
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.
c2alvaro
26/11/15, 21:47:55
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...
kriogeN
26/11/15, 21:58:01
Si usas el AppCompat las Actionbar ya no existen como tal, tienes que crear una Toolbar y asignarla como Actionbar.
Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(tr ue);
getSupportActionBar().setHomeButtonEnabled(true);
Y en el layout deberías tener algo parecido a esto en la parte superior:
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:layout_alignParentTop="true" />
También debes usar el NoActionbar como Parent en el Theme.
c2alvaro
27/11/15, 14:00:21
Si usas el AppCompat las Actionbar ya no existen como tal, tienes que crear una Toolbar y asignarla como Actionbar.
Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(tr ue);
getSupportActionBar().setHomeButtonEnabled(true);Y en el layout deberías tener algo parecido a esto en la parte superior:
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:layout_alignParentTop="true" />También debes usar el NoActionbar como Parent en el Theme.
Gracias amigo kriogen, como siempre muy utiles tus comentarios
vBulletin® v3.8.1, Copyright ©2000-2026, Jelsoft Enterprises Ltd.