Spanish SOLUCIONADO Eliminar todos los elementos de un tipo.

droman

Member
Licensed User
Longtime User
Hola.

Estoy intentando borrar, desde el código, todos los botones del Activity para poder crearlos de nuevo en base a la elección del usuario.

Pensé que este sería un buen método, pero no funciona:

B4X:
For i = 0 To Activity.NumberOfViews - 1
    If GetType(Activity.GetView(i))="android.widget.Button" Then
        Activity.RemoveViewAt(i)
    End If
Next

Tengo la extraña sensación de que al eliminar el primer botón, el número de NumberOfViews cambia y en la siguiente iteracción, no puede borrar el siguiente botón.

Edito:

Por ahora, he solucionado el problema generando un panel y asociando los botones a este, cuando vuelvo a generarlos, hago un
B4X:
Panel.RemoveAllViews
y de esta manera, sí me funciona. De todas formas, sigo interesado en la forma correcta de eliminar todas las vistas de un tipo concreto.

Muchas gracias.
 
Last edited:

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola:

Prueba de cambiar el inicio del bucle por:

B4X:
For i = Activity.NumberOfViews -1 To 0 Step -1

Saludos
 

droman

Member
Licensed User
Longtime User
Hola:

Prueba de cambiar el inicio del bucle por:

B4X:
For i = Activity.NumberOfViews -1 To 0 Step -1

Saludos


Efectivamente con este inicio del bucle funciona.

Muchas gracias bgsoft :)
 

bgsoft

Well-Known Member
Licensed User
Longtime User
De nada Droman.

Tengo la extraña sensación de que al eliminar el primer botón, el número de NumberOfViews cambia

Tu mismo ya viste el problema, empezabas a borrar el primer botón y por supuesto que el sistema reorganiza los indices puesto que has borrado el primero, y todos los indices "suben", al hacerlo desde el final no cambias nada y por eso funciona.

Yo suelo cargar lo que voy a visualizar en un panel, y de esa forma puedo "jugar" con diferentes paneles haciendolos visibles o no, y cuando me interesa descargarlos hago lo que tu hacias de remover el panel, y los protejo de errores, algo asi:

B4X:
Try
   If Panel.IsInitialized Then Panel.RemoveAllViews
Catch
End Try

No te asustes si en Debug te pinta el error de rojo, no se parará la App

Saludos
 

droman

Member
Licensed User
Longtime User
Creo que efectivamente voy a dejar el sistema del panel, así lo puedo tener todo más controlado, si en un futuro he de añadir un botón para realizar una acción concreta, ya tendría que andar comprobando que botón es el que estoy borrando. Mucho más ordenadito en un panel.
 
Top