Italian I tre pannelli

fabio_linate_milano

Member
Licensed User
Longtime User
Volevo lavorare su un progetto che ho in testa: una specie di cartellone (dentro una scrollview 2d)con delle celle disposte a matrice, e dentro ognuna cella una situazione complessa (tipicamente imageview, label spinner e edittext.
Ho realizzato un primo prototipo semplificato.
Questo
upload_2015-7-20_15-43-9-png.36052

Ho definito due layout: main e cella.
main contiene tre panel, cella il contenuto di ogni cella.
All'inizio carico main nel layout principale e cella in ognuno dei tre panel e provvedo a "generate members" per entrambe.
Questo è il codice:

B4X:
Sub Globals
    'These global variables will be redeclared each time the activity is created.
    'These variables can only be accessed from this module.

    'view statiche definite nel layout main
    Private alto As Panel
    Private basso As Panel
    Private centro As Panel
    'view statiche definite nel layout cella
    Private figura As ImageView
    Private tipologia As Spinner
    Private titolo As Label
   
End Sub

Sub Activity_Create(FirstTime As Boolean)

    Dim s As Spinner
   
    'Do not forget to load the layout file created with the visual designer. For example:
    Activity.LoadLayout("main")
   
    alto.LoadLayout("cella")
    centro.LoadLayout("cella")
    basso.LoadLayout("cella")
   
    tipologia.AddAll(Array As String("gennaio", "febbraio", "marzo"))
    s = centro.GetView(1)
    s.AddAll(Array As String("aprile", "maggio", "giugno"))

End Sub

tipologia ad esempio denota lo spinner, quando lo uso agisce solo sull'ultimo pannello caricato.
Se voglio caricare lo spinner del pannello centrale uso:
s = centro.GetView(1)
s.AddAll(Array As String("aprile", "maggio", "giugno"))
c'è la possibilità di interagire in modo simbolico?
ad esempio con una notazione tipo
centro.tipologia.addall( ...

un saluto a tutti
fabio milano
 

Attachments

  • upload_2015-7-20_15-43-9.png
    upload_2015-7-20_15-43-9.png
    135.6 KB · Views: 509
  • i3p.zip
    477.8 KB · Views: 285

LucaMs

Expert
Licensed User
Longtime User
Dopo alcuni "screzi" con un cretino presuntuoso e con il titolare di questo sito, io risponderò per dare una mano a qualche italiano solo su b4xitaliangroup.

Se vuoi, puoi pubblicare la tua domanda là.

Sorry
 

klaus

Expert
Licensed User
Longtime User
The problem with your code is that the Views in the cella layout have all the same name.
This means that you have several instances of the same view, if you use the name only the last instance will be considert.

I am convinced that it would be more efficient to add everything in the code in a For / Next loop.
That way you can:
- Dim and initialize the Views.
- Set their properties.
- Fill the Spinner in the loop.
- etc.
Doing this, if you know the number of entries, you could even define arrays for the different Views and initialize those in the For / Next loop and access them knowing their index.
 

Picena Informatica

Active Member
Licensed User
Longtime User
Se usi lo spinner più di una volta, o anche altri oggetti, devi rifare la Dim ad ogni nuova istanza. In questo caso dovresti usare tre layout o caricare gli oggetti da codice.
 

fabio_linate_milano

Member
Licensed User
Longtime User
Salve a tutti

grazie per tutte le risposte che ho ricevuto (che ahime in parte ho capito e in parte no!)
Nel prototipo che ho preparato ci sono solo 3 pannelli ma l'idea finale presenterà (se mai riuscirò ad implementarla) un area con un numero di pannelli abbastanza elevato (che, in aggiunta, potranno essere aggiunti o tolti dinamicamente).
Il layout esterno quindi non è statico e dovrà per forza essere gestito da codice.
Ma quello interno cioè quello che "metto" dentro una singola cella (per un discorso di eleganza/leggibilità software/...) mi piacerebbe poterlo preparare con il designer con i nomi delle view ben specificati e poter accedere alle view dentro una cella con il riferimento simbolico e cioè il nome della view.
Quando faccio addview dentro il designer il nome della view deve essere "esatto", posso chiamarla label1 ma non label1(i) e cioè associarla in qualche modo ad un vettore.
Mi sembra di capire che la CustomListView sia adatta allo scopo, non è facile da capire, ho iniziata a studiarla.
Può la custom ListView risolvere problemi di questa natura?

un saluto a tutti
da una afosa milano
 

LucaMs

Expert
Licensed User
Longtime User
Io ho usato CheckList, più che CustomListView.

A dispetto del nome, non è una ListView con in aggiunta la possibilità di inserire una CheckBox, è come la CustomListView, ovvero una ListView nella quale, anziché poter mettere solo i testi dentro a due label, puoi creare ogni item come ti pare.

Se prendi l'esempio allegato al post relativo, vedrai che è molto semplice; non dovrai fare altro che modificare secondo le tue esigenze la routine che costruisce l'item (CreateItem).
 
Last edited:

Star-Dust

Expert
Licensed User
Longtime User
Dopo alcuni "screzi" con un cretino presuntuoso e con il titolare di questo sito, io risponderò per dare una mano a qualche italiano solo su b4xitaliangroup.

Se vuoi, puoi pubblicare la tua domanda là.

Sorry
Di chi parli?
 
Top