Spanish ¿Como hacer un scroll vertical?

Ingeniero Cognitivo

Active Member
He probado uno de un tutorial. Creo que he seguido el tutorial correctamente pero no me funciona.
¿Alguien me hace el favor de darme el codigo para hacerlo?.
Gracias.
 

TheFalcon

Active Member
Licensed User
Longtime User
Yo lo hago con un Scrollview a secas, todo lo que supere su largo, sera deslizable, aunqeu solo meto 1 dato por linea

En otra aplicación lo hago cogiendo Fecha-Noticia de una MYSQL y los cargo en un Table, el cual también es deslizable al pasar el largo,hay si meto varios datos, si te valen te pego el código.
pero si tienes tiempo mírate lo que te dice José que es mas actual , y da muchas mas posibilidades, yo lo estoy ojeando.

Mis métodos son mas Rústicos :p
 

Ingeniero Cognitivo

Active Member
Usa un xCustomListView

Demasiado complicado. Si pido un scroll, es uno normal o el mas sencillo.
 

Ingeniero Cognitivo

Active Member
Usa un xCustomListView

Me ha costado 3 horas encontrar un tutorial que funcione solo con un scroll normal. He copiado uno que he encontrado aqui pero no me funciona.
 

TILogistic

Expert
Licensed User
Longtime User
Si publicas tu problema, tendrás bastante ayuda aquí en el foro español.

Vamos que se puede !!!!, mas B4X en habla hispana.

😁 😁 😁 😁

Saludos,
 

TheFalcon

Active Member
Licensed User
Longtime User
o di exactamente que es lo que quieres que haga para poder ayudarte con un ejemplo, y sobre todo como quieres insertar los datos, mediante TEXT o cogiéndolos de un archivo
 

Ingeniero Cognitivo

Active Member
sube el archivo que no te funciona

He hecho decenas de pruebas con este ejemplo y al final, asi es como puedo desplazar la mayoria del contenido del panel, pero no he podido llegar a mas.

No entiendo los valores de cada herramienta.

ScrollView1.Panel.LoadLayout("mover")
Panel1.Width = 100%x
'Panel1.Height = 8%y
'ScrollView1.Height = 20%y
'ScrollView1.Width = 1000'100%x

He copiado un ejemplo de los que habia aqui con la unica diferencia de poner solo unas pocas herramientas aleatorias y no funciona, por lo tanto esta claro que en ese ejemplo, la cantidad de herramientas que se pongan es fundamental pero yo necesito un ejemplo que permita desplazar cualquier cantidad de herramientas.

Sub Activity_Create(FirstTime As Boolean)
Activity.LoadLayout("Main")
scvTest.Panel.LoadLayout("ScrollViewLayout")
scvTest.Panel.Height = pnlTest.Height
End Sub

Sub edtItem_FocusChanged (HasFocus As Boolean)
Dim Send As EditText

If HasFocus Then
Send = Sender

scvTest.ScrollPosition = Send.Top - 10dip
End If
End Sub
 

Ingeniero Cognitivo

Active Member
He intentado hacerlo con el ultimo metodo que se me ha ocurrido y lo consegui. Lo curioso es que es un metodo muy diferente al de los ejemplos y tutoriales que he visto hasta ahora y ademas he comprendido porque hay que poner el scroll a un lado de las herramientas.

Sub Activity_Create(FirstTime As Boolean)
'Do not forget to load the layout file created with the visual designer. For example:
Activity.LoadLayout("Desplazar")
'ScrollView1.Panel.LoadLayout("desplazar")
ScrollView1.Panel.Height = Panel1.Height
End Sub

Sub ScrollView1_ScrollChanged(Position As Int)
Panel1.Top = Position
Button1.Top = Position
End Sub

¿Alguien me puede explicar porque este es el unico codigo que me funciona?.
 

edgar_ortiz

Active Member
Licensed User
Longtime User
Ingeniero,

Si pones el codigo segun el formato "recomendado", es mas facil entender lo que hace tu programa, por ejemplo (es mas facil entender):

B4X:
Sub Activity_Create(FirstTime As Boolean)
    'Do not forget to load the layout file created with the visual designer. For example:
    Activity.LoadLayout("Desplazar")
    'ScrollView1.Panel.LoadLayout("desplazar")
    ScrollView1.Panel.Height = Panel1.Height
End Sub

Sub ScrollView1_ScrollChanged(Position As Int)
    Panel1.Top = Position
    Button1.Top = Position
End Sub

que:

Sub Activity_Create(FirstTime As Boolean)
'Do not forget to load the layout file created with the visual designer. For example:
Activity.LoadLayout("Desplazar")
'ScrollView1.Panel.LoadLayout("desplazar")
ScrollView1.Panel.Height = Panel1.Height
End Sub

Sub ScrollView1_ScrollChanged(Position As Int)
Panel1.Top = Position
Button1.Top = Position
End Sub

Saludos,

Edgar
 

IdasI4A

Active Member
Licensed User
Longtime User
Yo usaría CustomListView no es muy complicado y te valdría tanto para B4A como B4i y B4J.
Sólo necesitas un layout con el CustomListView y otro con el diseño de los registro.
Te adjunto un ejemplo por si te puede ayudar.

B4X:
private Sub sbCargar
    Dim Indice As Int
    
    CLV.Clear
    For Indice=1 To 100
        Dim Pn As B4XView=xui.CreatePanel("")
        Pn.SetLayoutAnimated(0,0,0,Root.Width,60dip)
        Pn.LoadLayout("lyLinea") ' Cargamos el diseño de cada registro,
        Pn.GetView(0).Text=Indice ' Con Pn.GetView(0) obtenemos lblNumero
        Pn.GetView(1).Text="Linea número " & Indice ' Con Pn.GetView(1) obtenemos lblTitulo
        Dim B As Button=Pn.GetView(2)
        B.Tag=Indice
        
        ' podemos hacer un diseño tipo cebra
        If Indice Mod 2 =0 Then
            Pn.Color=xui.Color_White
        End If
        
        CLV.Add(Pn,Indice)
    Next
End Sub

Private Sub CLV_ItemClick (Index As Int, Value As Object)
    Dim Indice As Int
    Indice=Value
    xui.MsgboxAsync("Ha pulsado en el registro " & Indice,"Ejemplo CLV")   
End Sub

Private Sub btnEdit_Click
    Dim B As Button
    Dim Indice As Int
    
    B=Sender
    Indice=B.Tag
    xui.MsgboxAsync("Ha pulsado en botón EDITAR el registro " & Indice,"Ejemplo CLV")
End Sub
 

Attachments

  • EjemploCLV.zip
    11.5 KB · Views: 131
Top