Spanish Implementar retroceso desde la barra de Título (SOLUCIONADO)

desof

Well-Known Member
Licensed User
Longtime User
Hola,

Veo que es bastante frecuente utilizar una flechita en la parte izquierda del título para retroceder a la Activity anterior y no se como se hace..
A esto me refiero en el recuadro rojo

jL1LG7rrQ.png
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola:

Ese objeto es StdActionBar . La libreria tiene el mismo nombre

B4X:
Sub Globals
Dim BarraSuperior As StdActionBar ' lo declaras por ejemplo asi
...


Sub Activity_Create(FirstTime As Boolean)

BarraSuperior.Initialize("Barra")   ' lo inicializas
BarraSuperior.ShowUpIndicator = True ' activas el icono de ir hacia atras
...

' este es el sub cuando lo pulsas
Sub Activity_ActionBarHomeClick

End Sub

Saludos
 

rscheel

Well-Known Member
Licensed User
Longtime User
Si estas usando appCompat, se hace de la siguiente manera


B4X:
Sub Globals
    Private ActionBar As ACToolBarDark
    Dim ABHelper As ACActionBar
End Sub

Sub Activity_Create(FirstTime As Boolean)
    ActionBar.SetAsActionBar
    ActionBar.InitMenuListener
    ABHelper.Initialize
    ABHelper.ShowUpIndicator = True
End Sub

Sub  ActionBar_NavigationItemClick
    Activity.Finish
End Sub
 

desof

Well-Known Member
Licensed User
Longtime User
Si estas usando appCompat, se hace de la siguiente manera


B4X:
Sub Globals
    Private ActionBar As ACToolBarDark
    Dim ABHelper As ACActionBar
End Sub

Sub Activity_Create(FirstTime As Boolean)
    ActionBar.SetAsActionBar
    ActionBar.InitMenuListener
    ABHelper.Initialize
    ABHelper.ShowUpIndicator = True
End Sub

Sub  ActionBar_NavigationItemClick
    Activity.Finish
End Sub

Sí! estoy usando appCompat.
Tengo que agregar al Layout esos controles ?
 

desof

Well-Known Member
Licensed User
Longtime User
obtengo el error este al ingresar en la Actvity


B4X:
** Service (starter) Create **
** Service (starter) Start **
** Activity (main) Create, isFirst = true **
** Activity (main) Resume **
** Activity (main) Pause, UserClosed = false **
** Activity (farmacia) Create, isFirst = true **
farmacia_activity_create (java line: 364)
java.lang.RuntimeException: Object should first be initialized (ACToolBarDark).
    at anywheresoftware.b4a.AbsObjectWrapper.getObject(AbsObjectWrapper.java:50)
    at de.amberhome.objects.appcompat.ACToolBarWrapper.SetAsActionBar(ACToolBarWrapper.java:310)
    at guia.digital.sc.farmacia._activity_create(farmacia.java:364)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:507)
    at anywheresoftware.b4a.BA.raiseEvent2(BA.java:169)
    at guia.digital.sc.farmacia.afterFirstLayout(farmacia.java:102)
    at guia.digital.sc.farmacia.access$000(farmacia.java:17)
    at guia.digital.sc.farmacia$WaitForLayout.run(farmacia.java:80)
    at android.os.Handler.handleCallback(Handler.java:587)
    at android.os.Handler.dispatchMessage(Handler.java:92)
    at android.os.Looper.loop(Looper.java:130)
    at android.app.ActivityThread.main(ActivityThread.java:3683)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:507)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
    at dalvik.system.NativeStart.main(Native Method)
farmacia_activity_create (java line: 364)
java.lang.RuntimeException: Object should first be initialized (ACToolBarDark).
    at anywheresoftware.b4a.AbsObjectWrapper.getObject(AbsObjectWrapper.java:50)
    at de.amberhome.objects.appcompat.ACToolBarWrapper.SetAsActionBar(ACToolBarWrapper.java:310)
    at guia.digital.sc.farmacia._activity_create(farmacia.java:364)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:507)
    at anywheresoftware.b4a.BA.raiseEvent2(BA.java:169)
    at guia.digital.sc.farmacia.afterFirstLayout(farmacia.java:102)
    at guia.digital.sc.farmacia.access$000(farmacia.java:17)
    at guia.digital.sc.farmacia$WaitForLayout.run(farmacia.java:80)
    at android.os.Handler.handleCallback(Handler.java:587)
    at android.os.Handler.dispatchMessage(Handler.java:92)
    at android.os.Looper.loop(Looper.java:130)
    at android.app.ActivityThread.main(ActivityThread.java:3683)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:507)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
    at dalvik.system.NativeStart.main(Native Method)
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola

Según parece sobre el error que has escrito ( Object should first be initialized (ACToolBarDark) ), es como si no hubieras inicializado

Compila en modo debug y asi verás en que linea del código te da el error.

Saludos
 

desof

Well-Known Member
Licensed User
Longtime User
Prove con los 2 metodos como me has dichoo tu bgsoft y como me dijo rschel y obtendo error.
Debo inicial izar antes o despues de LoadLayout ? (de todas maneras prove de las 2 formas y me da el mismo problema.)
 

rscheel

Well-Known Member
Licensed User
Longtime User
Depende, si la barra la estas generando por código debes inicializar y si es por diseñador no es necesario, no tienes que agregar al layout esos controles, solo basta con ese codigo

Para poder ayudarte mejor podrías postear algo de código.
 

rscheel

Well-Known Member
Licensed User
Longtime User
Prove con los 2 metodos como me has dichoo tu bgsoft y como me dijo rschel y obtendo error.
Debo inicial izar antes o despues de LoadLayout ? (de todas maneras prove de las 2 formas y me da el mismo problema.)

Te quedaría algo así si la barra de estado esta en el layout

B4X:
Sub Globals
    Private ACToolBarDark As ACToolBarDark 'Este nombre debe ser el mismo de la barra del layout
    Dim ABHelper As ACActionBar
End Sub

Sub Activity_Create(FirstTime As Boolean)
    Activity.LoadLayout("Layout")
    ACToolBarDark.SetAsActionBar
    ACToolBarDark.InitMenuListener
    ABHelper.Initialize
    ABHelper.ShowUpIndicator = True
End Sub

Sub  ACToolBarDarkDatosDap_NavigationItemClick
    Activity.Finish
End Sub
 
Last edited:

desof

Well-Known Member
Licensed User
Longtime User
Depende, si la barra la estas generando por código debes inicializar y si es por diseñador no es necesario, no tienes que agregar al layout esos controles, solo basta con ese código

Para poder ayudarte mejor podrías postear algo de código.

Creo que con esta imagen se ve todo claramente

k2eV5uZ34.png
 
Last edited:

rscheel

Well-Known Member
Licensed User
Longtime User
Creo que con esta imagen se ve todo claramente

k2eV5uZ34.png
Primero que nada la versión de android que estas usando es completamente incompatible con appcompact, segundo guíate por el ejemplo que te deje mas arriba.
 

desof

Well-Known Member
Licensed User
Longtime User
Primero que nada la versión de android que estas usando es completamente incompatible con appcompact, segundo guíate por el ejemplo que te deje mas arriba.
1° Como cambio la versión de Android y por cual?
2° Entendido!

Gracias
 

rscheel

Well-Known Member
Licensed User
Longtime User
1° Como cambio la versión de Android y por cual?
2° Entendido!

Gracias

Una versión de android superior a 4.0 debería funcionare bien, aunque recomendable sera sobre android 5.0 para aprovechar todo lo visual que te entrega material design.

puedes usar un emulador o bien usar un teléfono con una versión de android de las que te indico.
 

desof

Well-Known Member
Licensed User
Longtime User
Acabo de probar en mi telefono que tiene Android 6 en modo DEBUG y con el codigo este

B4X:
Sub Activity_Create(FirstTime As Boolean)   
    Activity.LoadLayout("Layout1")
    BarraSuperior.Initialize("Barra")   ' lo inicializas
    BarraSuperior.ShowUpIndicator = True ' activas el icono de ir hacia atras
End Sub

y me da el error en esta Linea BarraSuperior.Initialize("Barra") ' lo inicializas

"Barra" a que hace referencia ?
 

rscheel

Well-Known Member
Licensed User
Longtime User
Acabo de probar en mi telefono que tiene Android 6 en modo DEBUG y con el codigo este

B4X:
Sub Activity_Create(FirstTime As Boolean)  
    Activity.LoadLayout("Layout1")
    BarraSuperior.Initialize("Barra")   ' lo inicializas
    BarraSuperior.ShowUpIndicator = True ' activas el icono de ir hacia atras
End Sub

y me da el error en esta Linea BarraSuperior.Initialize("Barra") ' lo inicializas

"Barra" a que hace referencia ?

Estimado por favor use este código, que le deje mas arriba, cambie los nombres por los que tenga su app y eso es todo, y si por si no entiende por favor adjunte su proyecto para poder ayudarlo mejor.

B4X:
Sub Globals
    Private ACToolBarDark As ACToolBarDark 'Este nombre debe ser el mismo de la barra del layout
    Dim ABHelper As ACActionBar
End Sub

Sub Activity_Create(FirstTime As Boolean)
    Activity.LoadLayout("Layout")
    ACToolBarDark.SetAsActionBar
    ACToolBarDark.InitMenuListener
    ABHelper.Initialize
    ABHelper.ShowUpIndicator = True
End Sub

Sub  ACToolBarDarkDatosDap_NavigationItemClick
    Activity.Finish
End Sub
 

desof

Well-Known Member
Licensed User
Longtime User
Estimado por favor use este código, que le deje mas arriba, cambie los nombres por los que tenga su app y eso es todo, y si por si no entiende por favor adjunte su proyecto para poder ayudarlo mejor.

B4X:
Sub Globals
    Private ACToolBarDark As ACToolBarDark 'Este nombre debe ser el mismo de la barra del layout
    Dim ABHelper As ACActionBar
End Sub

Sub Activity_Create(FirstTime As Boolean)
    Activity.LoadLayout("Layout")
    ACToolBarDark.SetAsActionBar
    ACToolBarDark.InitMenuListener
    ABHelper.Initialize
    ABHelper.ShowUpIndicator = True
End Sub

Sub  ACToolBarDarkDatosDap_NavigationItemClick
    Activity.Finish
End Sub

https://dl.dropboxusercontent.com/u/53113728/Retroceso.rar
Hola estoy reproduciendo el error que obtengo en este proyecto empezado desde cero para ver si clarifica el problema.
(no se como se inserta un adjunto aqui ya que nunca lo hice por eso comparto el enlace)
 

rscheel

Well-Known Member
Licensed User
Longtime User

desof

Well-Known Member
Licensed User
Longtime User
Todo mal lo que estaba haciendo, el archivo adjunto que le dejo es como se hace y funciona.

https://dl.dropboxusercontent.com/u/3155037/Retroceso.zip

Muchisimas pero muchisimas gracias! hubiésemos empezado pro un ejemplo que es la mejor manera de entenderse.
Jamás leí que tenia que agregar la barra al Layout por que creí que se generaba de forma dinámica y en un momento lo pregunté pero paso desapercibido.
Un abrazo y nuevamente muy agradecido.
 

desof

Well-Known Member
Licensed User
Longtime User
Todo mal lo que estaba haciendo, el archivo adjunto que le dejo es como se hace y funciona.

HOLA amigo de nuevo molestando sabes que llevo este sencillo codigo a mi app y me falla !!
He incluido el Layout de mi proyecto en el ejemplo que me enviaste y podrás ver que no funciona y no se porque a pesar de que reviso y pruebo diferentes situaciones.

https://dl.dropboxusercontent.com/u/53113728/Retroceso.rar
 

rscheel

Well-Known Member
Licensed User
Longtime User
HOLA amigo de nuevo molestando sabes que llevo este sencillo codigo a mi app y me falla !!
He incluido el Layout de mi proyecto en el ejemplo que me enviaste y podrás ver que no funciona y no se porque a pesar de que reviso y pruebo diferentes situaciones.

https://dl.dropboxusercontent.com/u/53113728/Retroceso.rar

Deberias hacer el layout y el activity nuevamente con la base ya echa y funcionando de la actionbar, ahí ya puedes empezar a armar tu código e ir probando que funcione y ir descartando los errores con el modo debug.
 
Top