Spanish [SOLUCIONADO]Abrir item seleccionado de ListView en una nueva pantalla

ferpahud

Active Member
Licensed User
Hola buenos días, lo que quiero hacer es un listado de algunos productos, donde salga una imagen del mismo, el nombre y una descripción corta, cuando el usuario seleccione algún producto, este se abra en una nueva pantalla, y muestre la imagen mas grande, el titulo, una descripción mas completa, el precio, etc.

Como puedo hacerlo? ya se como obtener el item seleccionado, pero no se como crear una nueva activity con los datos de ese item.

Desde ya muchas gracias!

Saludos!
 

vbmundo

Well-Known Member
Licensed User
También podrias crear un PANEL en el mismo Activity, con la propiedad VISIBLE=FALSE

Y cuando el usuario hace click en el elemento, se cambia a VISIBLE=TRUE y ahi le metes los controles o Views que hagan falta.

Saludos
 

ferpahud

Active Member
Licensed User
Un ejemplo

B4X:
Sub Process_Globals
    Dim id_item As Int
End Sub

B4X:
Sub Globals
    Private ListView1 As ListView
End Sub

B4X:
Sub Activity_Create(FirstTime As Boolean)
    ListView1.Initialize("ListView1")

    For i = 0 To 10
         ListView1.TwoLinesAndBitmap.Label.TextColor = Colors.rgb(66,66,66)
         ListView1.TwoLinesAndBitmap.Label.TextSize = 16
         ListView1.TwoLinesAndBitmap.Label.Gravity = Gravity.CENTER_VERTICAL
         ListView1.TwoLinesAndBitmap.Label.Height = 35dip
         ListView1.TwoLinesAndBitmap.Label.Width = 74%x
         ListView1.TwoLinesAndBitmap.Label.Left = 97dip

         ListView1.TwoLinesAndBitmap.SecondLabel.TextColor = Colors.rgb(158,158,158)
         ListView1.TwoLinesAndBitmap.SecondLabel.TextSize = 15
         ListView1.TwoLinesAndBitmap.SecondLabel.Gravity = Gravity.CENTER_VERTICAL
         ListView1.TwoLinesAndBitmap.SecondLabel.Height = 35dip
         ListView1.TwoLinesAndBitmap.SecondLabel.Top = 35dip
         ListView1.TwoLinesAndBitmap.SecondLabel.Width = 74%x
         ListView1.TwoLinesAndBitmap.SecondLabel.Left = 97dip
                              
         ListView1.TwoLinesAndBitmap.ImageView.Height = 60dip
         ListView1.TwoLinesAndBitmap.ImageView.Width = 60dip
         ListView1.TwoLinesAndBitmap.ImageView.Left = 15dip
         ListView1.TwoLinesAndBitmap.ImageView.Gravity = Gravity.CENTER_VERTICAL
         ListView1.TwoLinesAndBitmap.ItemHeight = 70dip
                              
         'lwListar.AddTwoLinesAndBitmap2("Item "&i, "Detalle", LoadBitmap(File.DirRootExternal & "/Download", "imagen.png" ), i)
         ListView1.AddTwoLinesAndBitmap2("Item "&i, "Detalle", LoadBitmap(File.DirAssets, imagen.png), i)                
    Next
End Sub

B4X:
Sub ListView1_ItemClick (Position As Int, Value As Object)
    id_item = Value
    StartActivity(ActivityParaVerDetalle) 'Se abre el activity con el detalle del item.
End Sub

Espero te sirva, cualquier cosa me consultas.
Pero como paso el id_item a ActivityParaVerDetalle?
 

ferpahud

Active Member
Licensed User
También podrias crear un PANEL en el mismo Activity, con la propiedad VISIBLE=FALSE

Y cuando el usuario hace click en el elemento, se cambia a VISIBLE=TRUE y ahi le metes los controles o Views que hagan falta.

Saludos
Gracias, podría ser una opción, pero desconozco el uso de paneles :(
 

vbmundo

Well-Known Member
Licensed User
Gracias, podría ser una opción, pero desconozco el uso de paneles :(

El panel no es mas que un Adview Mas.... así como tu adicionas a tu Layout un EDITTEXT o un LABEL, puedes añadir un PANEL

VISUAL DESIGN > ADD VIEW > PANEL

Lo pones por encima del resto de los controles... BOTON DERECHO DEL MOUSE sobre el PANEL y luego BRING TO FRONT

No olvides de setear ahi mismo en las propiedades del Panel "VISIBLE : FALSE"

Una cosa MUY IMPORTANTE , que no ocurre en el VISUAL BASIC de MICROSOFT y debes tener en cuenta.

Aun cuando arrastres controles por encima del PANEL y los ubiques ahí... debes modificar la propiedad PARENT de los controles, y en lugar de ACTIVITY seleccionar el nombre del PANEL, de esta forma, todas las modificaciones visuales que hagas al PANEL impactarán en los controles con contenga..

Ej. VISIBLE o ENABLE..

Saludos

 

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola Ferpahud:

Como te dice Pablo es muy simple hacerlo, pero si quieres hacerlo en otro activity, simplemente crea uno con el designer, crea los objetos que quieras que salgan (imagen, texto, etc), cuando te hagan click en el ListView, pasa los parámetros que te interesen a variables globales, que las puedes definir en un modulo de codigo o simplemente en el Sub Process_Globals del Main (donde arrancas la App) , llamas al otro activity ( StartActivity(NombreFormulario) ) luego desde el otro activity, simplemente cargas en tus objetos los valores de las variables globales.

Saludos
 

ferpahud

Active Member
Licensed User
El panel no es mas que un Adview Mas.... así como tu adicionas a tu Layout un EDITTEXT o un LABEL, puedes añadir un PANEL

VISUAL DESIGN > ADD VIEW > PANEL

Lo pones por encima del resto de los controles... BOTON DERECHO DEL MOUSE sobre el PANEL y luego BRING TO FRONT

No olvides de setear ahi mismo en las propiedades del Panel "VISIBLE : FALSE"



Aun cuando arrastres controles por encima del PANEL y los ubiques ahí... debes modificar la propiedad PARENT de los controles, y en lugar de ACTIVITY seleccionar el nombre del PANEL, de esta forma, todas las modificaciones visuales que hagas al PANEL impactarán en los controles con contenga..

Ej. VISIBLE o ENABLE..

Saludos
Muchas gracias, desconocía el uso de paneles y no sabia que era tan simple, sera de gran utilidad! gracias

Hola Ferpahud:

Como te dice Pablo es muy simple hacerlo, pero si quieres hacerlo en otro activity, simplemente crea uno con el designer, crea los objetos que quieras que salgan (imagen, texto, etc), cuando te hagan click en el ListView, pasa los parámetros que te interesen a variables globales, que las puedes definir en un modulo de codigo o simplemente en el Sub Process_Globals del Main (donde arrancas la App) , llamas al otro activity ( StartActivity(NombreFormulario) ) luego desde el otro activity, simplemente cargas en tus objetos los valores de las variables globales.

Saludos

Muy bien, lo haré finalmente con paneles, pero la opción de otra activity es buena para tenerla en cuenta, muchas gracias!
 
Top