German in Laufzeit erstellte EditText's ansprechen

kaplanerkan

Member
Licensed User
Longtime User
Hallo,

ich habe ein kleines Project, indem ich versuche mit btnPLUS- oder btnMINUS Tasten -1 oder +1 subtrahieren oder addieren, und den Zustand dann in laufzeit erstellen EditText zu schreiben.

Kann mir bitte jemand weiter helfen wie ich diese in laufzeit erstelle Butoons und EditText wieder anspreche?

Mein Code sieht aus:

B4X:
'Activity module
Sub Process_Globals
   'These global variables will be declared once when the application starts.
   'These variables can be accessed from all modules.
   Dim Text1,  Text3 As String
   Text1="22.25  Migrapolis"
   Text3="Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et"

End Sub

Sub Globals
   'These global variables will be redeclared each time the activity is created.
   'These variables can only be accessed from this module.
   Dim scvMain As ScrollView

End Sub

Sub Activity_Create(FirstTime As Boolean)
   scvMain.Initialize(500)
   Activity.AddView(scvMain,0,0,100%x,100%y)
   FillScrollView
End Sub

Sub Activity_Resume

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub

Sub FillScrollView
   Dim Bitmap1 As Bitmap
   Dim Panel0 As Panel
   Dim PanelTop, PanelHeight As Int
   
   Bitmap1.Initialize(File.DirAssets,"Icon.png")
   
   PanelTop=0
   Panel0=scvMain.Panel
   Panel0.Color=Colors.Gray

   For i=0 To 10
      Dim Panel1 As Panel
      Dim ImageView1 As ImageView
      
       Panel1.Initialize("View")
      Panel1.Tag=i&"0"
      PanelHeight=99dip   'Panelin Büyüklugü
      Panel0.AddView(Panel1,0,PanelTop,scvMain.Width,PanelHeight)
      Panel1.Color=Colors.Black
      
      ImageView1.Initialize("View")
      ImageView1.Tag=i&"3"
      Panel1.AddView(ImageView1,5dip,5dip,65dip,65dip)
      ImageView1.Bitmap=Bitmap1
      
      Dim lblSpeiseName As Label
      lblSpeiseName.Initialize("View")
      Panel1.AddView(lblSpeiseName,80dip,5dip,240dip,30dip)
      lblSpeiseName.Color=Colors.Black
      lblSpeiseName.Tag=i&"1"
      lblSpeiseName.Text=Text1

      Dim lblBeschreibung As Label
      lblBeschreibung.Initialize("View")
      Panel1.AddView(lblBeschreibung,80dip,30dip,240dip,60dip)
      lblBeschreibung.Tag=i&"2"
      lblBeschreibung.Text=Text3
      lblBeschreibung.TextSize=11

'      Dim p As Panel
'      p.Initialize("")
'      p.Tag = i&"4"
'      p.LoadLayout("2")
'      For v = 0 To p.NumberOfViews - 1
'         p.GetView(v).Tag = p 'set the panel as the Tag value
'      Next
''      Msgbox (Panel1.Width,"")
'      Panel1.AddView(p,Panel1.Width-270dip,1dip,270dip, 90dip)

      Dim p As Panel
      p.Initialize("")
      Dim btnMinus,btnPlus As Button
      btnMinus.Initialize("View")
      btnPlus.Initialize("View")
      btnMinus.TextSize=24
      btnPlus.TextSize=24
      btnMinus.Text="-"
      btnPlus.Text="+"
      btnMinus.Tag = i & "4"
      btnPlus.Tag =  i & "5"
      Dim AnzahlBox As EditText
      AnzahlBox.Initialize("View")
      AnzahlBox.Gravity=Gravity.CENTER
      AnzahlBox.Text="00"
      AnzahlBox.Tag=i & "6"
'      EditText1.InputType = EditText1.INPUT_TYPE_NUMBERS
      AnzahlBox.InputType = AnzahlBox.INPUT_TYPE_NONE
      

                'TODO: Design funktioniert auch nicht so gut...
      Panel1.AddView(p,Panel1.Width-200dip,1dip,270dip, 90dip)
      
      p.AddView(btnMinus, 15dip, 20dip, 60dip, 60dip)
      p.AddView(btnPlus, 135dip, 20dip, 60dip, 60dip)
      p.AddView(AnzahlBox,75dip, 20dip, 60dip, 60dip)
      
      
      
      PanelTop=PanelTop+PanelHeight+1dip
      
   Next
   Panel0.Height=PanelTop
End Sub



Sub View_Click
   Dim Send As View
   Dim row, Obj As Int
   Send=Sender
   
   row=Floor(Send.Tag/10)
   Obj=Send.Tag-row*10
   Select Obj
   Case 0
      Activity.Title="Row = "&row&"  Panel"
   Case 1,2
      Activity.Title="Row = "&row&"  Label = " & Obj
   Case 3
      Activity.Title="Row = "&row&" Image = " & Obj
   Case 4  'Minus 
      Activity.Title="Row = "&row&" MinusButton = " & Obj
                '-1 subtrahieren, nur bis Edittext.Text=00 ist, dann aufhören oder zb. btnMinus Visible= false

   Case 5  ' Plus
      Activity.Title="Row = "&row&"  PlusButton = " & Obj
                'HIER soll, der dazugehörige EditText +1 machen
                'Wenn der Summe => 12 ist, aufhörern zu zählen

   Case 6 'Edittext
      Activity.Title="Row = "&row&"  Anzahlbox= " & Obj
   End Select   
End Sub




Danke für jede Idee

Gruss
erkaN kaplaN
 

Kiffi

Well-Known Member
Licensed User
Longtime User
Du musst lediglich Deine Initialisierung anpassen:
B4X:
btnMinus.Initialize("btnMinus")
btnPlus.Initialize("btnPlus")

[...]

Sub btnMinus_Click
 ' Hier wurde Minus angeklickt
End Sub

Sub btnPlus_Click
 ' Hier wurde Plus angeklickt
End Sub

Grüße ... Kiffi

// Edit: mh, nach nochmaligem Durchlesen scheint mir Dein Problem
eher darin zu liegen, dass Du 'AnzahlBox' nicht in 'Sub Globals'
deklariert hast...
 
Last edited:

kaplanerkan

Member
Licensed User
Longtime User
danke für die schnelle Antwort Kiffi.


Die obige Code war nur ein Beispiel.....Anzahl (10) für die Schleife (For i=0 To 10 .......next) wird von MySQL mit Hilfe von "count(*)" gelesen und in Scrollview dargestellt. Da ist kein Problem. Click-Erreichnisse kann ich auch mit deinen oder mit meinem CASE empfangen, das ist auch kein Problem.

Mein Problem ist, wie spreche ich dann die EditText(x)?
 

kaplanerkan

Member
Licensed User
Longtime User
Wle und wo sind die EditText Views erstellt ?
Es fehlen eben leider noch Angaben, deine Codesnippets erlauben nicht eine konkrete Antwort zu geben.

Beste Grüsse.

Die EditText's werden hier erstellt:

B4X:
........
........
        Dim AnzahlBox As EditText
        AnzahlBox.Initialize("View")
        AnzahlBox.Gravity=Gravity.CENTER
        AnzahlBox.Text="00"
        AnzahlBox.Tag=i & "6"
'        EditText1.InputType = EditText1.INPUT_TYPE_NUMBERS
        AnzahlBox.InputType = AnzahlBox.INPUT_TYPE_NONE
        

                'TODO: Design funktioniert auch nicht so gut.
............
..............
 

klaus

Expert
Licensed User
Longtime User
Das hilft leider nicht viel weiter, wieder nur ein kleiner Teil des Puzzels.
Am einfachsten wäre es das Projekt als zip Datei zu schicken oder zu mindest eine abgemagerte Version die das Problem zeigt. Dann können wir genau sehen was wo und wie gemacht wurde und in den gleichen Bedingiungen testen wie Du. Zu oft ist das Problem eben nicht wo man zuerst denkt.

Wie es scheint erstellst Du die EditText Views in einer Schleife und füllst damit ein ScrollView.Panel. Sind in dem ScrollView.Panel noch andere Views drin ?

Beste Grüsse.
 

Kiffi

Well-Known Member
Licensed User
Longtime User
B4X:
Dim EditText1(0) As EditText
... kommt in Sub Globals

In FillScrollView muss Du die Tag-Property auf 'i' setzen:
B4X:
betenePlus(i).Tag  = i
beteneMinus(i).Tag = i
EditText1(i).Tag = i

und dann in den Event-Subs nur noch korrekt verarbeiten:
B4X:
Sub btnMinus_Click
    
      Dim CurrentView As View
      CurrentView = Sender

      Dim Index As Int
      Index = CurrentView.Tag
      
      Dim CurrentValue As Int
      CurrentValue = EditText1(Index).Text
      EditText1(Index).Text = CurrentValue - 1

End Sub

Sub btnPlus_Click

      Dim CurrentView As View
      CurrentView = Sender

      Dim Index As Int
      Index = CurrentView.Tag
      
      Dim CurrentValue As Int
      CurrentValue = EditText1(Index).Text
      EditText1(Index).Text = CurrentValue + 1

End Sub

(Tipp: da steht noch irgendwo Pulus anstelle von Plus. Nicht dass Du darüber stolperst)

Grüße ... Kiffi
 

kaplanerkan

Member
Licensed User
Longtime User
geht nicht, kommt immer folgende fehlermeldung:

java.lang.ArrayIndexOutOfBoundsException

ich glaube nur deswegen, da ich den EditText1 in Sub Globals Teil als,

Dim EditText1(0) As EditText

definire.....



Ich muss diesen Array später irgendwie REDIM machen können, da die COUNTER-anzahl unbedingt in "FillScrollView" bzw. "Activity_Create" ist.

Die geänderte VErsion ist im Anhang mit deiner Vorschläge.
 

Attachments

  • sabusabu_2.zip
    11 KB · Views: 214

Kiffi

Well-Known Member
Licensed User
Longtime User
geht nicht, kommt immer folgende fehlermeldung:

java.lang.ArrayIndexOutOfBoundsException
ich habe ja nicht geschrieben, dass Du ...

B4X:
Dim count As Int   : count = 10    'Wird später vom Mysql gelesen
Dim betenePlus(count) As Button
Dim beteneMinus(count) As Button
Dim EditText1(count) As EditText
... aus FillScrollView entfernen sollst ;)

Grüße ... Kiffi
 

kaplanerkan

Member
Licensed User
Longtime User
B4X:
Sub Global
Dim EditText1() As EditText
...............
...............
...............
Sub FillScrollView
............
............
   Dim count As Int   : count = 10    'Wird später vom Mysql gelesen
   
   Dim betenePlus(count) As Button
   Dim beteneMinus(count) As Button

      'WIE Mache ich ein ein REDIM für EditText1 ?



Nachdem COUNTER-Defination muss ich Redim EditText1(couter) machen können, aber wie?
 

Kiffi

Well-Known Member
Licensed User
Longtime User
In B4A gibt's kein ReDim(). Brauchst Du auch nicht. Ein einfaches
B4X:
Dim EditText1(count) As EditText
reicht.

Grüße ... Kiffi
 

kaplanerkan

Member
Licensed User
Longtime User
ich habe ja nicht geschrieben, dass Du ...

B4X:
Dim count As Int   : count = 10    'Wird später vom Mysql gelesen
Dim betenePlus(count) As Button
Dim beteneMinus(count) As Button
Dim EditText1(count) As EditText
... aus FillScrollView entfernen sollst ;)

Grüße ... Kiffi



Sorry, mein Fehler ;:)



@Kiffi
Ich dank dir für deine Mühe.
Läuft momentan Super wie ich es mir gewünscht habe.

gruss
erkaN kaplaN
 

pjo12345

Active Member
Licensed User
Longtime User

kaplanerkan

Member
Licensed User
Longtime User
Top