Spanish (SOLUCIONADO) ¿Cómo eliminar del todo un Layout cargado previamente y ya no me sirve?

Seneca

Active Member
Licensed User
Hola.

He creado un Layout que contiene un pequeño teclado numérico con un "display" que me va mostrando la numeración pulsada. Por varios motivos, he de cargar una segunda copia de este Layout, quedando sin uso la primera copia. Ambas copias usan el mismo código que detecta las teclas pulsadas.

Cuando quiero dejar de usar la segunda copia del teclado, y volver a la primera, lo que hago es pnCalculadora.RemoveView, siendo este panel el contenedor del propio teclado numérico. De esta manera me quedo en pantalla solo con la primera copia del teclado.

El problema que encuentro es que el segundo teclado, aunque ya no está en pantalla, sigue existiendo. De esta forma las pulsaciones que a partir de esto momento hago en la primera copia del teclado las interpreta como si se estuviesen haciendo en la segunda copia, que aunque ya no está visible, sigue existiendo.

Sé que no lo estoy explicando de una manera fácilmente entendible, pero a ver si alguien me indica cómo eliminar completamente el layout de la segunda copia del teclado.

Quizás si llevase todo esto a una clase me solucionaría el problema, pero de momento no lo veo claro.

Saludos.
 

Descartex

Well-Known Member
Licensed User
Longtime User
Y si haces:
B4X:
pnlCalculadora.RemoveAllViews
Un saludo.
 

Seneca

Active Member
Licensed User
Hola.

He probado esto:

B4X:
pnCalculadora.RemoveAllViews
pnCalculadora.Remove

Log(pnCalculadora.IsInitialized) 'Resultado: TRUE
Log(pnCalculadora.NumberOfViews) ' Resultado: 0

Y no me da resultado. Se ve que aunque remueva la segunda copia del teclado, la primera no recupera su actividad. Con esto quiero decir que, al quedar en pantalla la primera copia de la calculadora, cuando pulso cualquiera de las teclas (botones) el evento click correspondiente funciona bien. Pero cuando intento trasladar el número pulsado al Label.text que me hace las veces de pantalla de la calculadora, este Label no recibe dicho carácter.

Voy a intentar implementarlo como una Clase y comento.

Saludos.
 

JCO

Active Member
Licensed User
Longtime User
No sé cuales son los nombres del panel del teclado y el del que lo contiene (el padre), pero atención, estos dos statements:
B4X:
pnCalculadora.RemoveAllViews

pnCalculadora.Remove
se refieren a acciones diferentes:
pnCalculadora.Remove -> borra el panel 'pnCalculadora' (es decir, lo quita a su panel 'padre'
pnCalculadora.RemoveAllViews -> borra las views que estén contenidas dentro del 'pnCalculadora'
Es decir, no se refieren a los mismos objetos
 

Seneca

Active Member
Licensed User
No sé cuales son los nombres del panel del teclado y el del que lo contiene (el padre), pero atención, estos dos statements:
B4X:
pnCalculadora.RemoveAllViews

pnCalculadora.Remove
se refieren a acciones diferentes:
pnCalculadora.Remove -> borra el panel 'pnCalculadora' (es decir, lo quita a su panel 'padre'
pnCalculadora.RemoveAllViews -> borra las views que estén contenidas dentro del 'pnCalculadora'
Es decir, no se refieren a los mismos objetos

pnCalculadora es el contenedor superior, dentro del cual tengo las teclas (Button) y la pantalla (Label). Sí, mi intento era eliminar primero todo los elementos contenidos dentro del pnCalculadora (entre ellos el Label que hace las veces de pantalla). Y después, eliminar el propio panel contenedor pnCalculdadora. Me pregunto si hay algún método para que este último panel pierda la "inicialización".

Saludos.
 

Descartex

Well-Known Member
Licensed User
Longtime User
Muy buenas,
Para "reinicializar" un objeto, has de volver a declararlo, es decir, tras eliminarlo de su padre, que es lo que haces con pnCalculadora.RemoveView, has de volver a declararlo, con lo cual, la cosa quedaría asi:
B4X:
pnCalculadora.RemoveAllViews
pnCalculadora.RemoveView
Dim pnCalculadora as Panel

Con ésto, ya te responde False el pnCalculadora.IsInitialized

Un saludo.
 

Seneca

Active Member
Licensed User
Muy buenas,
Para "reinicializar" un objeto, has de volver a declararlo, es decir, tras eliminarlo de su padre, que es lo que haces con pnCalculadora.RemoveView, has de volver a declararlo, con lo cual, la cosa quedaría asi:
B4X:
pnCalculadora.RemoveAllViews
pnCalculadora.RemoveView
Dim pnCalculadora as Panel

Con ésto, ya te responde False el pnCalculadora.IsInitialized

Un saludo.

Hola.

Efectivamente así pierde la inicialización el panel, pero compruebo que esto no hace que la primera instancia de la calculadora vuelva a estar relacionada con las "Subs" correspondientes. Como este problema es similar al que ya me has ayudado en este otro hilo, busco la solución según lo tratado en ese hilo.

Gracias por la ayuda.
 
Top