French Question sur les scrollview

chefdeslapins08

New Member
Licensed User
Longtime User
Bonjour,

Je débute en B4A :)sign0104:) et je planche sur un cas de figure que je ne parviens pas à résoudre :
Je dispose donc d'un scrollview avec un nombre de panel qui peut être variable.
Dans chaque panel, il y a un bouton et une zone de texte (cf l'exemple ScrollViewNLayouts1 de Klaus).
Est il possible qu'un click sur un bouton modifie la valeur de la zone de texte (incrémentation par exemple) située dans le même panel du scrollview ?

Merci d'avance pour votre aide.
 

logemag

Member
Licensed User
Longtime User
Bonjour et bienvenue à toi, je te conseille d'indexer les editexts pour te simplifier l'incrémentation, pour l'instant dans l'exemple1 de Klaus il ne Tag que les boutons et les editexts, il te faudrait faire une boucle pour vérifier quelle editext possède le même tag que le bouton cliqué pour pouvoir l'incrémenter.

crée des editexts indexés pour simplifier ce problème :

B4X:
' nbr sera le nombre de lignes
dim nbr = 20 as int

For i=0 To Nbr-1
        Dim pnltest As Panel
        Dim btnTest As Button
        Dim edtTest(Nbr) As EditText

        pnltest.Initialize("pnlTest")
        scvMain.Panel.AddView(pnltest,0,5dip+i*PanelHeight,100%x,PanelHeight)
        pnltest.Tag=i
        If (i Mod 2)=1 Then
            pnltest.Color=Colors.Red
        Else
            pnltest.Color=Colors.Blue
        End If
        
        edtTest(i).Initialize("edtTest")
        pnltest.AddView(edtTest(i),90dip, 5dip, 110dip, 40dip)
        edtTest(i).Tag=i
        edtTest(i).Text = CE QUE TU VEUX COMME INT OU DOUBLE
        
        btnTest.Initialize("btnTest")
        pnltest.AddView(btnTest,240dip, 5dip, 70dip, 40dip)
        btnTest.Tag=i
        btnTest.Text="Test "&i
    Next
    scvMain.Panel.Height=PanelNb*PanelHeight
End Sub

Sub btnTest_Click
    Dim Send As Button = sender
    ' comme les editexts sont indexes je peux récuperer directement
    ' le contenu de sa valeur par le tag du bouton
    dim MAVALEUR = edtTest(send.tag).text as int
    edtTest(send.tag).text = MAVALEUR + 1

End Sub
 

klaus

Expert
Licensed User
Longtime User
Il n'est pas nécessaire d'indexer les EditTexts !
Avec les Tags toutes les Views peuvent être adressées.
En modifiant, dans ScrollViewNLayouts1 le code de btnTest_Click comme ci-dessous le nombre dans l'EditText est incrémenté de 1 :
B4X:
Sub btnTest_Click
    Dim btn As Button
    Dim pnl As Panel
    Dim edt As EditText
    Dim n As Int
    
    btn = Sender
    pnl = scvMain.Panel.GetView(btn.Tag)    
    edt = pnl.GetView(1)
    If IsNumber(edt.Text) Then
         n = edt.Text
    Else
        n = 0
    End If
    n = n + 1
    edt.Text = n
End Sub
Explication:
- Toutes les Views sur une même ligne ont la même valeur de Tag.
- En cliquant sur un bouton on connait l'indice de la ligne par la valeur de son Tag.
- On peut extraire le Panel de cettel ligne avec son indice avec pnl = scvMain.Panel.GetView(btn.Tag)
- On peut extraire du Panel l'EditText avec son indice dans le Panel avec edt = pnl.GetView(1)
indices des Views dans le Panel : lbl indice 0, edt indice 1, btn indice 2
- L'EditText étant défini on peut l'utiliser.
Les indices des Views dans une Activity ou un Panel correspondent à l'ordre de leur introduction.

Meilleures salutations.
 

chefdeslapins08

New Member
Licensed User
Longtime User
C'est tout à fait ce qu'il me faut !
Pour un débutant, les deux méthodes sont intéressantes à connaitre.
Merci à vous deux pour vos réponses !
 
Top