French clv affichant les items après click dessus (1er item)

fgh3966

Active Member
Licensed User
Bonjour la communauté
il y a une custom list view contenant 8 item et il faudrait que seulement le premier item s'affiche ... bref comme un label.
Ensuite losqu'on cliquerait sur cet item, donc sur la CLV , la CLV se déroulerait et l'utilisateur accèderais a tous les items.

Est ce possible ?
Merci
 

zed

Active Member
Licensed User
Tu donnes la réponse toi-même
il faudrait que seulement le premier item s'affiche ... bref comme un label.
Tu mets la valeur du premier Item dans un label et quand tu cliques sur le label, tu charge le CLV avec tous les items
 

LucaMs

Expert
Licensed User
Longtime User
Comme une sorte de ComboBox ? Théoriquement oui, mais je ne sais pas si ça vaut le coup.
Au début, vous dimensionnerez le CLV jusqu'à un élément, le premier. En cas de clic, vous augmenterez la hauteur du CLV.

[Je réponds sur le site français car... il n'y a pas de questions sur le site italien. J'utilise Google Translator, donc s'il y a des erreurs grammaticales, blâmez-le 😄 ; mon italien est au moins parfait 😊]
 

fgh3966

Active Member
Licensed User
En effet je viens d'y réfléchir zed, je suis bête ...
je pense qu'il faut modifier la liste items puis rafraichir la clv
Je vais regarder s'il y a une instruction du genre replace dans la bible des clv
 

zed

Active Member
Licensed User
Voici un code de @Mahares pour mettre à jour un clv.
 

fgh3966

Active Member
Licensed User
ton lien en dit long au final .... a prioris il faut utiliser le wrapper b4xview et là moi je l'utilise sans vraiment comprendre les possibilités qu'il offre.
Aussi j'ai fait des recherche sur b4x avec combo box et je suis tombé sur ce lien mais il utilise des listview ce qui m'irais bien, cependant est-ce conseillé pour de nouvelles applications ? (ça date de 2020 ou 2021)
Sinon j'ai fait ce zip, c'est sûrement pas le top pour les pro que vous êtes, il manque de redimmentionner le "widget" dumoin la case blanche (dans cette app) en fonction du nombre d'item dans la CLV. J'ai fais un essais pour 1 item, le redimmentionnement da la case du CLV plante le programme.
J'ai désactivé cette ligne.


--------- beginning of main
*** Service (starter) Create ***
** Service (starter) Start **
** Activity (main) Create (first time) **
** Activity (main) Resume **
Error occurred on line: 105 (Main)
java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
at java.util.ArrayList.get(ArrayList.java:437)
at anywheresoftware.b4a.objects.collections.List.Get(List.java:117)
at b4a.example3.customlistview._getrawlistitem(customlistview.java:447)
at b4a.example3.customlistview._getpanel(customlistview.java:440)
at b4a.example3.customlistview._resizeitem(customlistview.java:937)
at java.lang.reflect.Method.invoke(Native Method)
at anywheresoftware.b4a.shell.Shell.runVoidMethod(Shell.java:777)
at anywheresoftware.b4a.shell.Shell.raiseEventImpl(Shell.java:354)
at anywheresoftware.b4a.shell.Shell.raiseEvent(Shell.java:255)
at java.lang.reflect.Method.invoke(Native Method)
at anywheresoftware.b4a.ShellBA.raiseEvent2(ShellBA.java:157)
at anywheresoftware.b4a.BA.raiseEvent2(BA.java:205)
at anywheresoftware.b4a.BA.raiseEvent(BA.java:201)
at anywheresoftware.b4a.objects.ViewWrapper$1.onClick(ViewWrapper.java:80)
at android.view.View.performClick(View.java:6300)
at android.view.View$PerformClick.run(View.java:24948)
at android.os.Handler.handleCallback(Handler.java:790)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6523)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:857)
 

Attachments

  • test_CLV_modifable.zip
    9.8 KB · Views: 56

fgh3966

Active Member
Licensed User
Merci j'y suis presque!
Avec le designer on définie la hauteur par défaut de la CLV, est il possible de diminuer la hauteur si on n'affiche qu'un seul item ? Donc par programmation ?
 

fgh3966

Active Member
Licensed User
Pour redimensionner une CLV il faut un pannel et y placer la CLV à l'intérieur.
Avec l'instruction : Panel1.Height = 50dip on redimentionne la CLV et pas les items.
😉
 
Last edited:

zed

Active Member
Licensed User
Il y a 2 façons d'utiliser une CLV.

1 : clv.AddTextItem et tu peux ajuster la hauteur avec clv.ResizeItem. C'est comme tu as déjà fait.
Note que AddTextItem ajuste automatiquement la hauteur en fonctions du texte affiché.

2 :
clv:
clv.Add(CreateItem(clv.AsView.Width,Value1, value2), OtherValue)
Ici, tu dois créer un layout qui sera affiché dans la clv.

comme ceci
clv:
Private Sub CreateItem(w As Int, s As String) As Panel
    'tu crée un panel
    Dim p As B4XView = xui.CreatePanel("")
    'tu définis la hauteur du panel
    Dim height As Int = 300dip
    p.SetLayoutAnimated(0, 0, 0, w, height)
    'tu mets ton layout dans le panel
    p.LoadLayout("item")
    
     'Tu ecrits ton code    
     ----
     ----
     ----
    
    Return p
End Sub
 
Top