German Panel im ScrollView

Joe73

Active Member
Licensed User
Hallo,
könnte mir jemande weiterhelfen?
Ich erzeuge in einer ScrollView eine dynamische Anzahl von Panelen.
In den Panelen sollen dann Infos dargestellt werden.
Diese Infos möchte ich bei Bedarf bearbeiten. Dazu würde ich dann auf
das jeweilige Panel klicken und mir die Daten anzuzeigen zum editieren.
Wie kann man so etwas realisieren?
Wie schon geschrieben, die Anzahl der Panele soll variabel sein.

mfg Jürgen
 

DonManfred

Expert
Licensed User
Scrollview zu benutzen sieht für mich nach einem Fehler aus. Grundsätzlich.
Benutze xCustomListview.
 

ilan

Expert
Licensed User
Scrollview zu benutzen sieht für mich nach einem Fehler aus. Grundsätzlich.
Benutze xCustomListview.

Wenn Jürgen gerne eine Photogallery machen moechte dann macht es schon Sinn ein Scrollview zu nehmen da CLV nur ein Item pro Zeile anzeigen kann aber nicht 4 verschiedene Items in einer Zeile anzeigen kann zum Beispiel.

Wie kann man so etwas realisieren?

eigentlich ist es ganz eifach, du nimmt ein Scrollview, dann legst du ein Panel rein und auf dieses Panel kann du deine Items hizufuegen.
ich mach dir ein simple Example mit einigen items dass in jedem Item ein Label + Imageview drinne ist.

Screenshot_20181228-154021.jpg
 

Attachments

  • scrollview.zip
    50.3 KB · Views: 550

Filippo

Expert
Licensed User

Joe73

Active Member
Licensed User
Hallo,

habe mir das mal angesehen und etwas herumgespielt.
Dabei liegt mein Augenmerk derzeit auf diesen beiden SUBs:


B4X:
Sub clv2_ItemClick(Index As Int, Value As Object)
    Dim aktPan As Panel
    clv2.AsView.BringToFront
    Log(Index & " = " & Value)
    clv2.InsertAt(Index, CreateListItem($"Item !!!"$, clv2.AsView.Width, 160dip), $"Item !!!"$)
    
End Sub

Sub CreateListItem(Text As String, Width As Int, Height As Int) As Panel
    Dim p As Panel
    p.Initialize("")
    p.SetLayout(0, 0, Width, Height)
    p.LoadLayout("CellItem")
    Label1.Text = Text
    Return p
End Sub

Dabei bleiben noch folgende Fragen offen für mich:

Zwischen zwei Panelen möchte ich einen Zwischenraum einfügen,
das wird sich wohl mit einem zusätzlichen Label realisieren lassen.
(bei der ScrollView konnte man die Views ja direkt angeben, das geht hier wohl nicht)
Was auch recht nett wäre, wenn clv2_ItemClick ausgelöst wird durch anklicken,
möchte ich, dass sich das angeklickte Panel in der Höhe ändert und kein weiteres hinzugefügt wird.
Nach Anklicken eines weiteren Panels soll das vorherige wieder seine ursprüngliche
Größe bekommen und das Angeklickte sich vergrößern usw.

wäre nett wenn da jemand auf die Schnelle eine Idee hat.

mfg und Alles Gute für 2019 wünscht Euch Jürgen
 

DonManfred

Expert
Licensed User
das wird sich wohl mit einem zusätzlichen Label realisieren lassen
oder einfacher ein leeres Panel.
bei der ScrollView konnte man die Views ja direkt angeben, das geht hier wohl nicht
du kannst sehr wohl Views hinzufügen.
clv2.InsertAt erwarted ein Panel. Füge einfach ein leeres Panel hinzu.
du kannst natürlich auch ein Label auf dem Panel plazieren um sowas wie "Header" Zeilen zu generieren. Aber als Pspacer reicht ein leeres Panel.

B4X:
Sub CreateSpacer(Width As Int, Height As Int) As Panel
    Dim p As Panel
    p.Initialize("")
    p.SetLayout(0, 0, Width, Height)
    p.LoadLayout("Spacer")
    Return p
End Sub

B4X:
 clv2.InsertAt(Index, CreateSpacer(clv2.AsView.Width, 5dip), $"spacer !!!"$)
 

Joe73

Active Member
Licensed User
Danke für die schnelle Hilfe,

bleibt nun noch die temporäre Größenänderung...
Kann leider erst morgen testen da ich nun in die Spätschicht muss...
Aber lesen und antworten kann ich hier wenigstens...

Gruß...
 

Joe73

Active Member
Licensed User
Hallo,
habe nochmals drüber nachgedacht über die Änderung der Größe eines beliebigen
Panels aus der Liste.
Wenn es denn funktionieren würde könnte man ein Panel über ItemClick(Index)
auswählen und seine Größe ändern oder man wählt ein Panel aus, erzeugt die
Liste neu und ändert bei dem ausgewählten Panel dann die Größe...?
mfg Jürgen
 

Joe73

Active Member
Licensed User
Hallo,

so, ich habe es hinbekommen.
Mit

B4X:
clv2.ResizeItem(Index,60dip)

funktioniert es.

mfg Jürgen
 
Top