Italian oggetto List visibile da tutte le activity

udg

Expert
Licensed User
Longtime User
Ciao. Se per un qualche motivo non vuoi adottare l'impostazione B4xPages (che sarebbe comunque altamente consigliata), l'impostazione che suggerivo era la seguente:
1. definisci un tipo di dati in grado di gestire lo stato checked (es. Type Miodato = (etichetta as string, prezzo as double, qty as int, ordinato as boolean) )
2. definisci una List di MioDato e carichi tutti i possibili elementi che appariranno in Activity1 (presumo sia un menu) con "ordinato = false)
3. in activity1 inizializzi la sua CLV tramite la List di cui sopra
4. gestisci, in Activity1 il click sull'elemento per selezionare/deselezionare un elemento (modificando di conseguenza il valore di ordinato)
5. Passando ad Activity2 (checkout o riepilogo ordine), utilizzi la List del punto 2 (che avrà i campi "ordinato" aggiornati grazie alle azioni eseguite al punto4) per riempire una sua CLV. Qui potresti modificare le quantità (se non le avevi gestite in Activity1), effettuare la somma del dovuto, calcolare sconto, scorporo IVA, etc

Il vantaggio (enorme) del modello B4xPages è che mentre sei in Activity2 puoi accedere dierttamente agli elementi della CLV di Activity1; questo perchè le due activity sono entrambe "attive" (anche se, ovviamente, una sola è in primo piano).
 

LucaMs

Expert
Licensed User
Longtime User
Il vantaggio (enorme) del modello B4xPages è che mentre sei in Activity2 puoi accedere dierttamente agli elementi della CLV di Activity1; questo perchè le due activity sono entrambe "attive" (anche se, ovviamente, una sola è in primo piano).
1600062622419.png


(es. Type Miodato = (etichetta as string, prezzo as double, qty as int, ordinato as boolean) )
Senza il segno "="
 

LucaMs

Expert
Licensed User
Longtime User
Ragassi (si fa per dire ?), il punto principale è che da "oggi" sarà sempre meglio usare le B4XPages.

Hanno un lungo elenco di vantaggi e solo mezzo (anzi, un ottavo) "difetto", aggirabile molto facilmente: potranno essere o soltanto in portrait o soltanto in landscape.
Ma questo riguarda l'Activity che conterrà le B4XPages, mentre si potrebbero sempre aggiungere altre Activity con orientamento inverso.
 

LucaMs

Expert
Licensed User
Longtime User
Sì, se la ListaSelezionati contiene testi e non View.
Piccola correzione. Malgrado sia meglio che la lista contenga solo dati e non oggetti grafici (view), in quel modo, passandola come paramentro ad una routine di un'altra Activity, potresti anche passare una lista contenente view.

Inoltre, esattamente com'è il tuo codice non funzionerebbe, perché chiameresti una routine di un'Activity dall'interno di un'altra. Dovresti scrivere:
B4X:
'In Activity2'
Public Sub PrendoLista(ListaSelezionati as List)
'Faccio quello che devo fare con ListaSelezionati (che sarebbe lstCheckedItems)...
End Sub

'In Activity1
Sub PassoLaLista()

  CallSubDelayed2(Activity2, "PrendoLista", lstCheckedItems)
  Activity.Finish

End Sub
 
D

Deleted member 103

Guest
Ho creato un piccolo esempio, vedi se ti può essere d'aiuto.
video.gif
 

Attachments

  • Test2.zip
    12.5 KB · Views: 182

Sabotto

Well-Known Member
Licensed User
Ok, al momento userò il codice come l'esempio di @Filippo (una sola precisazione: Hai messo l'Initialize della CLV "lstcheckedItems" sia nello Starter che nella Sub MostraIChecked del modulo Main; è un refuso o è voluto?

Non conosco ancora il mondo delle B4XPages. Sono alle prime armi con B4A, pur avendo abbastanza esperienza con VB.NET; ho cominciato a leggere i post in inglese ma occorrerebbe poi provare con del codice per capire bene. Lo farò successivamente sicuramente, ma ora questa app è già quasi in conclusione per modificarla.
Siete utilissimi perchè, con le vostre risposte, si ottengono altre informazioni utili oltre a quelle inerenti la domanda (ad esempio non sapevo che una List contenente View non può essere dichiarata nella Process_Globals).
Al prossimo "inghippo"...
 

LucaMs

Expert
Licensed User
Longtime User
Sto guardando l'esempio di Filippo. Pur essendo funzionante, non va benissimo. Il motivo è che il riempimento della CustomListView2 dell'Activity mActivity2 avviene nell'Activity_Create. Nel momento in cui si tornasse a questa Activity e la List lstcheckedItems nello Starter fosse stata modificata, i dati visualizzati non sarebbero quelli nuovi/aggiornati.

Insomma, il "blocco" 'Crea una lista e visualizza' andrebbe spostato nella Activity_Resume (premettendo anche un: CustomListView2.Clear).
 

Sabotto

Well-Known Member
Licensed User
E' una piccola svista. Nota che lstcheckedItems è una LIST, non una CustomListView.
Dato che è stata dichiarata nello Starter, è là che andrebbe inizializzata.
Si infatti, è una svista anche la mia... non CLV, ma semplice List. ?
 

Sabotto

Well-Known Member
Licensed User
Sto guardando l'esempio di Filippo. Pur essendo funzionante, non va benissimo. Il motivo è che il riempimento della CustomListView2 dell'Activity mActivity2 avviene nell'Activity_Create. Nel momento in cui si tornasse a questa Activity e la List lstcheckedItems nello Starter fosse stata modificata, i dati visualizzati non sarebbero quelli nuovi/aggiornati.

Insomma, il "blocco" 'Crea una lista e visualizza' andrebbe spostato nella Activity_Resume (premettendo anche un: CustomListView2.Clear).
Occorrono due bei .clear prima di riempire sia "lstcheckeditems" che "CustomListView2" e a quel punto la seconda penso possa rimanere anche nella Create di Activity2
 

LucaMs

Expert
Licensed User
Longtime User
Occorrono due bei .clear prima di riempire sia "lstcheckeditems" che "CustomListView2" e a quel punto la seconda penso possa rimanere anche nella Create di Activity2
Vero, infatti anche la List va svuotata, prima di aggiungervi altri nomi (poi l'ho fatto ma ho evitato di scriverlo/postare il progetto corretto).

Se le Activity sono soltanto quelle due e la mActivity2 viene portata in primo piano solo tramite il codice nell'evento MostraIChecked, allora sì, puoi lasciare il caricamento di CustomListView2 nella Activity_Create, altrimenti va spostato nella Resume. Per non avere sorprese in caso di modifiche alla tua app, meglio metterlo in questa.
 
Top