Spanish Como valido los datos introducidos en un editText

IdasI4A

Active Member
Licensed User
Longtime User
Buenas, lo que deseo es poder validar que el usuario haya metido un dato en un edittext, y que cuando salgo de él si no ha puesto nada que no le deje salir del edittext.
He probado a poner la validación en FocusChanged, pero cuando sale del edittext1 al edittext2 y el edittext1 no cumple hago un RequestFocus al edittext1, pero entonces salta la validación del editext2 y se pone en un bucle infinito pasado del edittext1 al edittext2.
Adjunto el código:
B4X:
Sub Globals
   'These global variables will be redeclared each time the activity is created.
   'These variables can only be accessed from this module.
   Dim vPanel As ScrollView
End Sub

Sub Activity_Create(FirstTime As Boolean)
   'Do not forget to load the layout file created with the visual designer. For example:
   'Activity.LoadLayout("Layout1")
   vPanel.Initialize(10dip)
   Activity.AddView(vPanel,0,0,100%x,100%y)
   
   vIME.Initialize("vIME")
   Dim Nombres() As String=Array As String ("Lunes","Martes","Miercoles","Jueves","Viernes","Sabado","Domingo")
   Dim i As Int
   
   For i=0 To Nombres.Length-1
     CargarTXT(Nombres(i))
   Next
End Sub

Sub Activity_Resume

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub

Sub CargarTXT(Nombre As String)
   Dim y As Int
   Dim etCantidad As EditText
   Dim lblNombre As Label

   y=vPanel.Panel.Height
   vPanel.Panel.Height=y+50
   
   lblNombre.Initialize("")
   vPanel.Panel.AddView(lblNombre,0,y,150dip,40dip)
   lblNombre.Gravity=Gravity.CENTER_VERTICAL
   lblNombre.Text=Nombre
   
   etCantidad.Initialize("etCantidad")
   etCantidad.InputType=etCantidad.INPUT_TYPE_NUMBERS
   vPanel.Panel.AddView(etCantidad,160dip,y,80dip,40dip)
End Sub

Sub etCantidad_FocusChanged (HasFocus As Boolean)
   Dim eT As EditText

   eT=Sender
   If HasFocus=False Then ' Cuando sale
     If eT.Text="" Then
       ToastMessageShow("Ha de indicar un número cero",True)
       eT.RequestFocus
       Return
     End If
   End If
End Sub
Pongo algo en lunes y paso al martes, si en martes no pongo nada y paso al miercoles, el cursor se pone a pasar indefinidamenete del martes al miercoles.
¿Alguien se le ocurre como lo puedo solucionar?
Gracias
 

bgsoft

Well-Known Member
Licensed User
Longtime User
Hola

Te pongo el comentario ' --------- añadir ----------- para que veas rapido lo que tienes que añadir para que te funcione

B4X:
Sub Globals
  'These global variables will be redeclared each time the activity is created.
  'These variables can only be accessed from this module.
  Dim vPanel As ScrollView
  Dim Anterior As String  ' --------- añadir -----------
  Dim RecuperarFoco As Boolean ' --------- añadir -----------
End Sub

Sub Activity_Create(FirstTime As Boolean)
  'Do not forget to load the layout file created with the visual designer. For example:
  'Activity.LoadLayout("Layout1")
  vPanel.Initialize(10dip)
  Activity.AddView(vPanel,0,0,100%x,100%y)

  vIME.Initialize("vIME")
  Dim Nombres() As String=Array As String ("Lunes","Martes","Miercoles","Jueves","Viernes","Sabado","Domingo")
  Dim i As Int

  For i=0 To Nombres.Length-1
    CargarTXT(Nombres(i))
  Next
End Sub

Sub Activity_Resume

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub

Sub CargarTXT(Nombre As String)
  Dim y As Int
  Dim etCantidad As EditText
  Dim lblNombre As Label

  y=vPanel.Panel.Height
  vPanel.Panel.Height=y+50

  lblNombre.Initialize("")
  vPanel.Panel.AddView(lblNombre,0,y,150dip,40dip)
  lblNombre.Gravity=Gravity.CENTER_VERTICAL
  lblNombre.Text=Nombre

  etCantidad.Initialize("etCantidad")
  etCantidad.Tag = Nombre ' --------- añadir -----------
  etCantidad.InputType=etCantidad.INPUT_TYPE_NUMBERS
  vPanel.Panel.AddView(etCantidad,160dip,y,80dip,40dip)
End Sub

Sub etCantidad_FocusChanged (HasFocus As Boolean)
  Dim eT As EditText

  eT=Sender

  If RecuperarFoco =True AND Anterior <> eT.Tag Then Return ' --------- añadir -----------
  RecuperarFoco = False   ' --------- añadir -----------
  Anterior=eT.Tag ' --------- añadir -----------


  If HasFocus=False Then ' Cuando sale
    If eT.Text="" Then
      ToastMessageShow("Ha de indicar un número cero",True)
      RecuperarFoco =True ' --------- añadir -----------
      Anterior= eT.Tag ' --------- añadir -----------
      eT.RequestFocus
      Return
    End If
  End If
End Sub

Saludos
 
Top