Spanish ¿como cargar en un panel los datos seleccionados en un ListView?

enmaber

Member
Estimados compañeros. estoy intentando cagar los datos de una linea de un ListView sin acierto alguno, ruego vuestra ayuda

#Region Activity Attributes
#FullScreen: False
#IncludeTitle: False
#End Region

Sub Process_Globals
'These global variables will be declared once when the application starts.
'These variables can be accessed from all modules.
Dim id_item As Int
End Sub



Sub Globals
'These global variables will be redeclared each time the activity is created.
'These variables can only be accessed from this module.


Dim s As SQL
Dim c As Cursor
Dim lv As ListView
Dim Panel1 As Panel

Dim btn_alta As Button

Private txt_nombre As EditText
Dim txt_apellidos As EditText
Private txt_fecha As EditText
Private txt_talla As EditText

Dim EditText1 As EditText
Dim txt_apno As EditText

Dim s As SQL
Dim c As Cursor
Dim lv As ListView
Dim di As String


End Sub

Sub Activity_Create(FirstTime As Boolean)
Activity.LoadLayout("modificar")

Dim ruta As String


If File.ExternalWritable Then
ruta = File.DirDefaultExternal
Else
ruta = File.DirInternal
End If

If File.Exists(ruta, "fila.db") = False Then
File.Copy(File.DirAssets, "fila.db", ruta, "fila.db")
End If

s.Initialize(ruta, "fila.db", True)

c=s.ExecQuery("SELECT apellidos, nombre FROM Fila ORDER BY apellidos ASC") ' funciona
lv.Clear
If c.RowCount>0 Then
For i=0 To c.RowCount-1
c.Position=i
lv.Visible = True
lv.SingleLineLayout.Label.TextSize = 15
lv.AddSingleLine(c.GetString("apellidos") & ", " & c.GetString("nombre")) 'funciona
Next
End If
End Sub

Sub Activity_Resume

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub


Sub lv_ItemClick (Position As Int, Value As Object)
id_item = Value
lv.Visible = False
Panel1.Visible=True
txt_nombre.Text = "nombre"
txt_apellidos.Text= "apellidos"
End Sub
 

bgsoft

Well-Known Member
Licensed User
Hola Enmaber:

Cuando pongas código, hazlo dandole al icono de "insert" (arriba a la derecha) y así se entenderá mucho mejor el código.

Estimados compañeros. estoy intentando cagar los datos de una linea de un ListView sin acierto alguno, ruego vuestra ayuda
Por otro lado tu pregunta es muy extensa, ya que solo decir que intentas cargar los datos de un listview es dificil saber que te pasa, si no salen los valores, las etiquetas...

Creo que el problema que tienes es que en las etiquetas no te salen los valores. Si es eso te explico como, y si es otra cosa lo comentas e intentamos ayudarte.

B4X:
  Sub lv_ItemClick (Position As Int, Value As Object)
  txt_nombre.Text = "nombre " & value
Erel tiene un tutorial con ejemplo que quizas te iria bien echarle un vistazo:
https://www.b4x.com/android/forum/threads/listview-tutorial.6537/

Te recomiendo que emplees ScrollView, es mucho mas potente y es muy facil hacer muchas mas cosas.

Saludos
 

enmaber

Member
Uf , lo siento por lo mal que me explicado, voy a intentar hacerlo mejor. Mi problema es el siguiente: tengo una base de datos con una tabla llamada fila y una serie de campos entre ellos nombre y apellido. Quiero que sea dinámica, es decir que pueda añadir, borrar o modificarla. Las altas y bajas me salen bien, mi problema es modificar los registros. Para ello trabajo con ListView. Deseo que cuando seleccione uno de los item del lisView (nombre y apellidos) se oculte el listView y aparezca el panel donde deben cargarse todos los campos que necesite de cada registro en los mismas cajas de texto o label, etc. Una vez cargados los campos de registro y modificados los datos si se desea, se volverán a grabar. Realmente como verás lo que deseo es poder modificar registros de una base de datos. Con la opción que me has facilitado cargo el valor completo del item del listview en una caja de texto, pero yo deseo cargar nombre, apellidos y resto de los datos del registro en el panel. Muchas gracias

B4X:
#Region  Activity Attributes
    #FullScreen: False
    #IncludeTitle: False
#End Region

Sub Process_Globals
    'These global variables will be declared once when the application starts.
    'These variables can be accessed from all modules.
    Dim id_item As Int
End Sub



Sub Globals
    'These global variables will be redeclared each time the activity is created.
    'These variables can only be accessed from this module.

   
    Dim s As SQL
    Dim c As Cursor
    Dim lv As ListView
    Dim Panel1 As Panel
   
    Dim btn_alta As Button
   
    Private txt_nombre As EditText
    Dim txt_apellidos As EditText
    Private txt_fecha As EditText
    Private txt_talla As EditText
   
    Dim EditText1 As EditText
    Dim txt_apno As EditText
   
    Dim s As SQL
    Dim c As Cursor
    Dim lv As ListView
    Dim di As String


End Sub

Sub Activity_Create(FirstTime As Boolean)
    Activity.LoadLayout("modificar")

    Dim ruta As String

   
    If File.ExternalWritable Then
        ruta = File.DirDefaultExternal
    Else   
        ruta = File.DirInternal
    End If
   
    If File.Exists(ruta, "fila.db") = False Then
        File.Copy(File.DirAssets, "fila.db", ruta, "fila.db")
    End If
   
    s.Initialize(ruta, "fila.db", True)
   
    c=s.ExecQuery("SELECT apellidos, nombre FROM Fila ORDER BY apellidos ASC") ' funciona
    lv.Clear
    If c.RowCount>0 Then
        For i=0 To c.RowCount-1
            c.Position=i
             lv.Visible = True   
            lv.SingleLineLayout.Label.TextSize = 15
            lv.AddSingleLine(c.GetString("apellidos") & ", " & c.GetString("nombre")) 'funciona
        Next
    End If
End Sub

Sub Activity_Resume

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub


Sub lv_ItemClick (Position As Int, Value As Object)
                lv.Visible = False
                Panel1.Visible=True
txt_nombre.Text = "nombre" & Value
    
  End Sub
 

bgsoft

Well-Known Member
Licensed User
Hola

No puedes sacar mas datos del Listview que los que has metido, y en tu codigo solo veo que pones nombre y apellidos.
Si lo quieres meter por separado, crea una doble linea y mete en cada una por separado nombre y apellidos.

Por otro lado creo que no es muy efectivo meter todos los datos de ese registro en un listview o cualquier otro objeto.

Yo lo haria de esta forma:
1) Crear un indice en la base de datos
2) Cuando cargues el ListView, ese indice cargalo en la propiedad Tag
3) Al pulsar puedes consultar el tag y no tendras que hacer una busqueda en la base de datos por la coincidencia de nombre y apellidos (que a veces tiende a errores)
4) Crea un panel que por defecto lo haces invisible, y cuando te pulsen en el listview, carga los datos cogidos de la base de datos en los objetos label o los que quieras poner (incrustados en el panel, propiedad parent) , y cuando lo hagas haces visible el panel y lo subes arriba (NombrePanel.BringToFront)
5) cuando te den el OK a aceptar los cambios, carga los valores de los objetos a la base de datos y haces invisible el panel

Dicho esto, yo personalmente no trabajaria con ListView, si no con ScrollView, es muy potente y facil de crear, aqui tienes un tutorial con ejemplos:
https://www.b4x.com/android/forum/threads/scrollview-example.6612/

Saludos
 

enmaber

Member
Hola

No puedes sacar mas datos del Listview que los que has metido, y en tu codigo solo veo que pones nombre y apellidos.
Si lo quieres meter por separado, crea una doble linea y mete en cada una por separado nombre y apellidos.

Por otro lado creo que no es muy efectivo meter todos los datos de ese registro en un listview o cualquier otro objeto.

Yo lo haria de esta forma:
1) Crear un indice en la base de datos
2) Cuando cargues el ListView, ese indice cargalo en la propiedad Tag
3) Al pulsar puedes consultar el tag y no tendras que hacer una busqueda en la base de datos por la coincidencia de nombre y apellidos (que a veces tiende a errores)
4) Crea un panel que por defecto lo haces invisible, y cuando te pulsen en el listview, carga los datos cogidos de la base de datos en los objetos label o los que quieras poner (incrustados en el panel, propiedad parent) , y cuando lo hagas haces visible el panel y lo subes arriba (NombrePanel.BringToFront)
5) cuando te den el OK a aceptar los cambios, carga los valores de los objetos a la base de datos y haces invisible el panel

Dicho esto, yo personalmente no trabajaria con ListView, si no con ScrollView, es muy potente y facil de crear, aqui tienes un tutorial con ejemplos:
https://www.b4x.com/android/forum/threads/scrollview-example.6612/

Saludos

Muchas gracias por todo, saludos
 

bgsoft

Well-Known Member
Licensed User
Hola enmaber

Si ya lo solucionaste, podrias añadir a la cabecera [SOLUCIONADO], gracias.

Saludos
 
Top