Spanish Heredar de una clase.

josete

Member
Licensed User
Longtime User
Le he estado echando un ojo al tutorial de creacion de clases ( http://www.b4x.com/android/forum/threads/classes-tutorial.18626/ )pero no he encontrado informacion acerca de crear una clase que herede de otra ya existente.Se trataria de hacer algo parecido a esto: http://www.sgoliver.net/blog/?p=1467 es decir crear un view que a su vez esta compuesto de otros views (seria una especie de widget) mediante la creacion de una clase que hereda de layout.He probado con una variable type que contiene las views que necesito pero no puedo usarla con .addview en la activity o en un panel ya que espera que le pasemos un objeto view y no una variable y se complica su uso.En fin me da que aun no hay soporte para la herencia en b4a pero no encuentro otra manera de hacer lo que quiero.
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola Josete

Que yo sepa no se ha implementado en B4A clases con herencia, creo que lo que tu quieres es una clase con interfaz, y eso por ahora no se puede hacer. Sin embargo, puedes utilizar CallSub (y SubExists) para implementar una solución similar. Esto se llama "interfaz de pato" (duck interface). Haz una busqueda de "duck interface" y encontraras algunos ejemplos.

Mirate esto que quizas te valga como idea de codigo aunque no tenga nada que ver con ese ejemplo que pones del login.
http://www.b4x.com/android/forum/threads/class-custom-tabhost.19047/#content

Saludos
 

josete

Member
Licensed User
Longtime User
Por mas que leo los post al respecto y los ejemplos ,no acabo de "pillar" la filosofía .lo que yo quiero es crear diferentes views compuestas de otras views que se añadirían a un panel según las funcionalidades que se necesiten a modo de widgets y en tiempo de ejecución.por ejemplo si necesito controlar un led RGB necesitaría un widget o view que incorpore tres etiquetas con los nombres de los colores (r,g,b) y tres seekbar para regular de 0 a 255 y conseguir cualquier color.
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola Josete

Perdona si no conteste antes pero estuve fuera.

No se si lo que te voy a decir te va a parecer una tonteria y ya lo sabes, pero mejor comentarlo y con suerte te puede ayudar.

Si en el modulo de clases creas un inicializar y le pasas la actividad desde donde lo llamas y por ejemplo el numero de esa view compuesta, luego con un Show, o directamente en el inicializar haces visible el panel correspondiente con esa Views compuesta, está claro que no tendras herencia, pero haciendote las views compuestas que necesites podras conseguirlo, por otro lado si hay dos muy parecidas con un copiar/pegar el codigo sera muy rapido de ampliar.

Te pongo algo rapido de codigo para que veas la idea:

B4X:
Public Sub Initialize(Activity2 As Activity,NumeroVista as Int)
ActualActivity = Activity2

Select Case NumeroVista

Case 1
 
Dim Tapa1 AsPanel
Tapa1.Initialize("") 
Tapa1.Color = Colors.Black 
Tapa1.Visible = False
ActualActivity.AddView(Tapa1,0,0,100%x,100%y) 

dim Label1 as label
label1.Initialize("") 
label1.Text = "Texto del label"
label1.TextColor = Colors.White
label1.Color=Colors.Blue
label1.TextSize = 20
Tapa1.AddView(label1,left,top,ancholabel,altolabel) 'lo incrustamos en el panel 

Dim boton1 AsButton
boton1.Initialize("Boton1") ' Inicializamos con el nombre del evento 
boton1.Tag = 1 ' para saber el indice en el evento 
boton1.Text = "Texto del botón 1"  
Tapa1.AddView(boton1,left,top,anchoboton,altoboton) 
.........
.......
........
........
Case 2
' creamos otro panel con sus objetos
.....
.....
.....

Sub Show (NumeroVista)

Select Case NumeroVista

Case 1
 Tapa1.Visible=true
 Tapa1.BringToFront
case 2
 Tapa2.Visible=true
 Tapa2.BringToFront

Se que el codigo no es una maravilla :D, pero es para que veas mi idea, lo demas es cosa tuya ;).
Si quieres que debajo de tu panel no se vea nada, en el Initialize creas un panel que lo tape todo, pero despues los paneles con las views tendran que incrustarse en este, no en el formulario (ActualActivity). La ventaja de poner un panel que lo tape todo, es que para quitar la views o saber que esta activa solo tienes que hacer referencia a este.
Puedes evitarte el Show y hacerlo en el Initialize.

Espero haberte ayudado

Saludos
 

josete

Member
Licensed User
Longtime User
Estoy explorando la posibilidad de utilizar un webview que cargaria una pagina web local ,si encuentro la manera de ir modificando el archivo html e ir refrescando la pagina,podria usar jquery para conseguir imitar casi todas las views de android,junto con la libreria webviewextras ,que permite hacer llamadas callsub a la aplicacion desde javascript para comunicar lo que se haga en la web con la aplicacion.No se si es una locura.
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Todo depende de si la cantidad de view es muy grande, si son solo algunas con este metodo lo tienes facil y tambien de seguir ampliando cada vez que necesites una, por otro lado puedes guardarlo en una libreria y asi simplemente la tendras que añadir a tu proyecto en vez del modulo de clases. Yo me creé un FileDialog por que el estandar ni me daba todo lo que queria ni me gustaba su aspecto, lo hice en un modulo de clase y luego lo compilé como libreria, me va fantastico cuando tengo que usarlo por que solo debo marcar esa libreria y hacer las llamadas.

Saludos
 

josete

Member
Licensed User
Longtime User
El objetivo de todo esto es controlar una placa Arduino mediante bluetooth desde un dispositivo android y la idea inicial es poder crear un panel de control que te permita controlar lo que tengas conectado al arduino y que este panel te lo puedas crear tu mismo segun las necesidades que tengas,por lo que en un mismo panel puedes tener el control de un servo,uno o varios reles,una luz rgb regulable ,la lectura de varios sensores,enviar ordenes a la placa ,recibir datos de la placa,etc,etc,de ahi la complejidad.
 
Top