Spanish Inicializar CustomListView [Solucionado]

carlos7000

Well-Known Member
Licensed User
Longtime User
Hola a todos.

Tengo una pequeña aplacion que funciona, pero a veces se bloquea. Al bloquearse aparese un mensaje informando que un objeto List, no se ha iniciaalizado. Ya he verificado todo el codigo y todos los list se inicializan corretamente, creo. Pero note que un CustomListView no se inicializa.

La función de inicialización del CustomListView pide dos parámetros vCallback y vEventName

Francamente no entiendo porque la aplicación generalmente funciona bien y ocasionalmente aparece ese error. De todas formas para eliminar un posible error que gustaría inicializar correctamente el CustomListView Me podrían explicar como se debe inicializar el CustomListView
 

josejad

Expert
Licensed User
Longtime User
Sin ver tu código, difícil .

Por ejemplo, tenemos que imaginar que añades tu clv con código y no con el designer, ya que si lo haces de esta segunda forma, no hace falta inicializarlo
 

carlos7000

Well-Known Member
Licensed User
Longtime User
Hola José,

Me gustaría compartirte el proyecto, pero deseo hacerlo a través de mensaje privado. Hay dos razones principales detrás de esto: en primer lugar, el proyecto contiene información privada (Importante para mi. Nada del otro mundo), y tendría que eliminarla o encriptarla antes de enviarlo. En segundo lugar, debo admitir que siento cierta vergüenza al respecto. Aunque he estado programando durante mucho tiempo, lo he hecho de manera esporádica, lo que ha resultado en un código lleno de errores y soluciones rápidas.

Sin embargo, quiero enfatizar que si encuentras algún error, no me molesta en absoluto que compartas el código junto con una posible solución. De hecho, creo que todos podríamos aprender de ello y enriquecer nuestros conocimientos en programación.

Además, si puedes brindarme alguna ayuda para mejorar el programa, estaría enormemente agradecido. Aprecio mucho cualquier consejo o sugerencia que puedas ofrecerme.

Espero haber expresado adecuadamente mis inquietudes y solicitudes. Agradezco mucho su apoyo y espero poder aportar algo para resolver los problemas en mi proyecto y mejorar mis habilidades de programación.

¡Muchas gracias de antemano por su ayuda!
 

josejad

Expert
Licensed User
Longtime User
Hola Carlos:

No tengo problema en que lo compartas de manera privada conmigo, aunque considero que el foro se enriquece más si lo compartes aquí (eliminando los datos sensibles) y vamos a dudas concretas más que a intentar "mejorar" un programa. Entrecomillo "mejorar" porque bueno, a veces no es que un programa sea mejor que otro sino simplemente hay distintos enfoques o algunas buenas prácticas. Por otro lado, no creas que yo soy un gran programador, como tú, he hecho algún programa de manera puntual y no es que sean maravillas ni muchísimo menos, todo lo contrario.
De todas formas, lo que pueda aportar, si no tienes mucha prisa (ando liadete y bueno, estamos en verano e intento estar en remojo, jeje), estaré encantado de hacerlo si decides compartirlo conmigo.

saludos,
 

carlos7000

Well-Known Member
Licensed User
Longtime User
Hola Carlos:

No tengo problema en que lo compartas de manera privada conmigo, aunque considero que el foro se enriquece más si lo compartes aquí (eliminando los datos sensibles) y vamos a dudas concretas más que a intentar "mejorar" un programa. Entrecomillo "mejorar" porque bueno, a veces no es que un programa sea mejor que otro sino simplemente hay distintos enfoques o algunas buenas prácticas. Por otro lado, no creas que yo soy un gran programador, como tú, he hecho algún programa de manera puntual y no es que sean maravillas ni muchísimo menos, todo lo contrario.
De todas formas, lo que pueda aportar, si no tienes mucha prisa (ando liadete y bueno, estamos en verano e intento estar en remojo, jeje), estaré encantado de hacerlo si decides compartirlo conmigo.

saludos,
Hola, José.

He eliminado toda la información importante. Como mencioné anteriormente, en general, el programa funciona bien, aunque en ocasiones muestra un mensaje de error que indica que el CustomView no ha sido inicializado, junto con otros errores ocasionales. No creo que sea un problema del equipo, ya que he estado utilizando el programa desde 2018 en diferentes equipos. Además, algunos familiares también utilizan la aplicación y ocasionalmente experimentan los mismos problemas.

Saludos,
 

Attachments

  • Mis WayPoints.zip
    123.7 KB · Views: 56

josejad

Expert
Licensed User
Longtime User
Hola Carlos:

No puedo probar el proyecto ya que no encuentro en el foro ninguna librería llamada AniMenu.
Echándole un ojo por encima, no puedo decirte nada que yo hiciera mejor, sólo recomendaciones genéricas (además de que apenas he trabajado poco con el gps, fusedlocation y googlemaps)
- Lo primero, borra el módulo CustomListView y selecciona la librería desde "Libraries Manager"
- Sería bueno, y más en este tipo de aplicaciones que se ejecutan en background, que la pasaras a B4XPages. A poco que hagas un par de pruebas, verás que no es complicado, y tiene la ventaja de que no tienes que estar lidiando con los Activities Pauses, Resumes, no hay que vigilar nada raro cuando la app pasa a background y cosas de esas. Echa un ojo aquí a las ventajas
- Echo de menos el servicio Starter. Aunque no es obligatorio, es un buen sitio para inicializar. Revisa los ejemplos en los que te has basado para ver si algunas inicializaciones estén hechas en él.

Del error que recibes, sólo puedo intuir dos escenarios en los que te podría ocurrir:
- Que el error que recibes sea cuando la app lleva mucho tiempo en background (y por tanto puede que android mate la actividad Main) y llegues al evento Gps_LocationChanged y se llame a ActualizaListView. Aunque creo que esto lo gestionas bien porque veo por ahí un CallSubDelayed2 que debería inicializarlo todo antes de llamar a la sub
- Que el error que recibes sea por el script del diseñador en el que llamas a CustomListView1.SetLeftAndRight(0%x, 100%x)

Creo que la mejor forma de averiguarlo, ya que es difícil depurar este tipo de errores que se dan solo cuando la app está ya en uso y llevan mucho tiempo ejecutándose, es que implementes en tu app la librería Firebase Analitics. Te será fácil ya que ya implementas algunos servicios de google para los mapas, así te llegará un registro de lo que ocurre, y la línea exacta donde recibes el problema (será el número de línea del código java, no del B4A, pero te dará una buena pista de dónde está el error).

Y lo dicho, creo que si lo pasas a B4XPages, te irá bastante mejor.

saludos!!
 

carlos7000

Well-Known Member
Licensed User
Longtime User
Hola José

He realizado su sugerencia de cambiar el antiguo CustomListView por el que incluye B4A en su manejador de librerías y esto fue lo que paso:


Con respecto a la sugerencia de hacerle un Upgrade a B4XPages. Auque baje algunos ejemplos y me funcionan, no entiendo la logica de los ejemplos. Estoy perdido. En lo que comenta Erel BX4Pages tiene muchas ventajas pero aun esta crudo y hay pulirlo mas, por eso aun esta en Beta.

Me atrae la idea de las nuevas posibilidades, pero faltan tutoriales simples.

Por favor mire el video, solo dura 6 minutos.

Saludos.

Nota: Adjunto la librería que necesita.
 

Attachments

  • Anima Menu.rar
    5 KB · Views: 65
Last edited:

josejad

Expert
Licensed User
Longtime User
Pero bueno, si ese programa está genial!
A ver si mañana lo pruebo, entretanto, prueba a ejecutarlo en modo debug en vez de en modo release, y te dirá en qué línea está fallando en B4A.

Apuesto a que cuando mire por la mañana, ya has averiguado el problema…

Saludos,
 
Last edited:

TILogistic

Expert
Licensed User
Longtime User
porque seleccionas Customlistview , la libreria oficial es xCustomlistview

1688088898238.png


1688088923398.png
 

TILogistic

Expert
Licensed User
Longtime User
seleccione
1688090831508.png


B4X:
        For i = 0 To Lista.Size -1
            WayPointTemp = Lista.Get(i)
            'ListView1.AddTwoLines2(WayPointTemp.nombre, WayPointTemp.distancia, WayPointTemp)
            CustomListView1.Add(CreateListItem(i, WayPointTemp.nombre, WayPointTemp.distancia, CustomListView1.AsView.Width, 45dip), WayPointTemp)
        Next

Ver seccion V 1.2
1688091058471.png
 

carlos7000

Well-Known Member
Licensed User
Longtime User
seleccione
View attachment 143344

B4X:
        For i = 0 To Lista.Size -1
            WayPointTemp = Lista.Get(i)
            'ListView1.AddTwoLines2(WayPointTemp.nombre, WayPointTemp.distancia, WayPointTemp)
            CustomListView1.Add(CreateListItem(i, WayPointTemp.nombre, WayPointTemp.distancia, CustomListView1.AsView.Width, 45dip), WayPointTemp)
        Next

Ver seccion V 1.2
View attachment 143345
He cambiado la librería a xCustomListView. Los parámetros que recibe la función, ahora son distintos.

Traté de actualizar los parámetros, pero estoy algo confundido. ¿Que es 'Pni as B4XviewWrapper'?

Esta línea

B4X:
CustomListView1.Add(CreateListItem(i, WayPointTemp.nombre, WayPointTemp.distancia, CustomListView1.AsView.Width, 45dip), WayPointTemp)

ahora como debe ser?

Reemplacé la línea con:

B4X:
CustomListView1.Add(CreateListItem(i, WayPointTemp.nombre, WayPointTemp.distancia, CustomListView1.AsView.Width, 45dip), WayPointTemp)

Pero no funciona.
 

angel_

Well-Known Member
Licensed User
Longtime User
Añade la librería xui o xuiviews.

No consigo que funcione me faltan algunas librerías pero los custom types tienes que inicializarlos yo haría este cambio:

B4X:
Sub ActualizaListView
    If (Aqui.IsInitialized) Then
        ActualizaDistancias   
    
        Lista.SortType("distancia", True)
        'ListView1.Clear
    
        If MarkersCant > 0 Then
            'gmap.Clear
            MarkersCant = 0
        End If
        
        CustomListView1.Clear
        
        For i = 0 To Lista.Size -1
            Dim WayPointTemp As WayPoint = Lista.Get(i)
            Dim pnl As B4XView = CreateListItem(i, WayPointTemp.nombre, WayPointTemp.distancia, CustomListView1.AsView.Height, 45dip)
            CustomListView1.Add(pnl, WayPointTemp)
        Next
    End If
End Sub

Sub CustomListView1_ItemClick(Index As Int, Value As Object)
    Dim wp As WayPoint = Value
    
    'gmap.AddMarker(wp.latitud, wp.longitud, wp.nombre)
    gmap.AddMarker2(wp.latitud, wp.longitud, wp.nombre, HColor)
    MarkersCant = MarkersCant + 1
    
    Dim CP As CameraPosition
    CP.Initialize(wp.latitud, wp.longitud, 14)
    gmap.AnimateCamera(CP)
End Sub
 

carlos7000

Well-Known Member
Licensed User
Longtime User
Añade la librería xui o xuiviews.

No consigo que funcione me faltan algunas librerías pero los custom types tienes que inicializarlos yo haría este cambio:

B4X:
Sub ActualizaListView
    If (Aqui.IsInitialized) Then
        ActualizaDistancias  
   
        Lista.SortType("distancia", True)
        'ListView1.Clear
   
        If MarkersCant > 0 Then
            'gmap.Clear
            MarkersCant = 0
        End If
       
        CustomListView1.Clear
       
        For i = 0 To Lista.Size -1
            Dim WayPointTemp As WayPoint = Lista.Get(i)
            Dim pnl As B4XView = CreateListItem(i, WayPointTemp.nombre, WayPointTemp.distancia, CustomListView1.AsView.Height, 45dip)
            CustomListView1.Add(pnl, WayPointTemp)
        Next
    End If
End Sub

Sub CustomListView1_ItemClick(Index As Int, Value As Object)
    Dim wp As WayPoint = Value
   
    'gmap.AddMarker(wp.latitud, wp.longitud, wp.nombre)
    gmap.AddMarker2(wp.latitud, wp.longitud, wp.nombre, HColor)
    MarkersCant = MarkersCant + 1
   
    Dim CP As CameraPosition
    CP.Initialize(wp.latitud, wp.longitud, 14)
    gmap.AnimateCamera(CP)
End Sub

Creí que había adicionado la librería xui, pero no.

Ya compila sin errores, pero aparece el siguiente error:

WhatsApp Image 2023-06-30 at 00.17.32.jpeg
 

carlos7000

Well-Known Member
Licensed User
Longtime User
He cambiado la línea

B4X:
CustomListView1.Add(CreateListItem(i, WayPointTemp.nombre, WayPointTemp.distancia, CustomListView1.AsView.Width, 45dip), WayPointTemp)

por

B4X:
Dim pnl As B4XView = CreateListItem(i, WayPointTemp.nombre, WayPointTemp.distancia, CustomListView1.AsView.Height, 45dip)
CustomListView1.Add(pnl, WayPointTemp)

yegd7d37.JPG


Persiste el mismo error.
 

carlos7000

Well-Known Member
Licensed User
Longtime User
Compila en modo debug

La compilar en modo debug, el programa se quiebra en la línea

B4X:
Activity.LoadLayout("main")

Muestra el siguiente error:

(Exception) java.lang.Exception: java.lang.RuntimeException: java.lang.ClassNotFoundException: com.cl4551f13d.MisWaypoints.customlistview
 

carlos7000

Well-Known Member
Licensed User
Longtime User
Entra en el diseñador, elimina el CustomListView y vuelve añadirlo, para que referencie ya a la nueva librería, y ya te funciona
Ya lo hice. Funciono!

Ahora el problema es que los colores del CustomListView se cambiaron.

¿Cómo los restauro o pongo otros similares?
¿Porque el nuevo CustomListView no muestra los colores correctos del Layout 'CellItem'?
 
Top