German Temporär über EditText und "Sender" den Text von Labels ändern

JOTHA

Well-Known Member
Licensed User
Longtime User
Hallo allerseits,

laaange war ich nicht mehr aktiv, habe jetzt wieder angefangen und schon ein kleines Problem:

Ich muss mehrere Labels ändern und dazu möchte ich nach dem anklicken eines Labels ein EditText-Feld beschriften (editieren) und dann nach drücken der Enter-Taste den Text an das Label übergeben. Das ist alles kein Problem bis zu diesem Punkt.

Weil es aber viele Labels sind, möchte ich nur ein einziges EditText-Feld das quasi temporär nur zum editieren dient und dann die verschiedenen Labels ändert. Das habe ich schon einmal vor langer Zeit gemacht über eine "Sender"-Funktion, ich finde aber den Code nicht mehr.

Also ein Beispiel:

Label1 anklicken, Cursor geht in das EditTextFeld1, dort gebe ich Text1 ein und mit Enter wird dieser Text an Label1 übergeben. Dann ...

Label2 anklicken, Cursor geht wieder in das EditTextFeld1, dort gebe ich Text2 ein und mit Enter wird dieser Text an Label2 übergeben. Dann ...

Label3 anklicken, Cursor geht wieder in das EditTextFeld1, dort gebe ich Text3 ein und mit Enter wird dieser Text an Label3 übergeben.

u.s.w ... es sind über 200 Labels!

Kann mir jemand einen Tip geben?
Wie gesagt, ich hatte so etwas schon ... in Verbindung mit "Sender" ...

Vielen Dank schon mal im Voraus!
 

klaus

Expert
Licensed User
Longtime User
Das könnte so aussehen.
B4X:
Sub Globals
    Dim edtText1 As EditText
    Dim CurrentLabel As Label
    Dim scvLabels As ScrollView
    Dim IME1 As IME
End Sub

Sub Activity_Create(FirstTime As Boolean)
    IME1.Initialize("")
    CurrentLabel.Initialize("")

    edtText1.Initialize("edtText1")
    Activity.AddView(edtText1, 10dip, 10dip, 250dip, 40dip)
    edtText1.ForceDoneButton = True
    
    scvLabels.Initialize(100)
    Activity.AddView(scvLabels, 10dip, 50dip, 250dip, 100%y - 60dip)

    Dim i As Int
    For i = 0 To 20
        Dim lbl As Label
        lbl.Initialize("lbl")
        scvLabels.Panel.AddView(lbl, 0, 50dip * i, 250dip, 40dip)
        lbl.Tag = i
        lbl.TextSize = 16
        lbl.TextColor = Colors.Black
        lbl.Gravity = Gravity.CENTER_VERTICAL
        lbl.Color = Colors.White
    Next
    scvLabels.Panel.Height = i * 50dip
End Sub

Sub lbl_Click
    If CurrentLabel.IsInitialized Then
        CurrentLabel.Color = Colors.White
    End If
    Dim CurrentLabel As Label
    CurrentLabel = Sender
    CurrentLabel.Color = Colors.Yellow
    edtText1.Text = ""
    edtText1.Hint = "Eingabe Label " & CurrentLabel.Tag
    edtText1.RequestFocus
    IME1.ShowKeyboard(edtText1)
End Sub

Sub edtText1_EnterPressed
    CurrentLabel.Text = edtText1.Text
    IME1.HideKeyboard
End Sub
Du musst das Alles natürlich an Deine Bedingungen anpassen.
Benutzt de IME Library.
Beiliegend das Testprogramm.

Beste Grüsse.
 

Attachments

  • Labels.zip
    6.1 KB · Views: 209

JOTHA

Well-Known Member
Licensed User
Longtime User
SUUUUPER !!! Vielen Dank!

:) Hallo Klaus,

schön, von Dir nach so langer Zeit zu hören!

Ich habe dein Beispiel heruntergeladen und ausprobiert ... funzt!
Jetzt hoffe ich, das ich es in meiner Anwendung anpassen und umsetzen kann!

... wird schon klappen ...

Jedenfalls vielen herzlichen Dank für deine Unterstützung!
 
Top