Italian andare in una altra interfaccia

Nikeddy

Active Member
Licensed User
Longtime User
Salve a tutti, ho creato la mia prima prova app.. una semplice list contenente dei valori, che carico da un db mysql.

seleziono un elemento della list e me lo visualizza sulla label. e ok.

vorrei però che se tocco il valore della label, mi si apra una nuova interfaccia, dove visualizzo la scheda del valore. (come una rubrica telefonica per capirci, dove seleziono dall'elenco il nome, ci clicco e visualizzo il tel , la mail ecc) come faccio dentro a b4a?

grazie!
 

zakker

Member
Licensed User
Salve a tutti, ho creato la mia prima prova app.. una semplice list contenente dei valori, che carico da un db mysql.

seleziono un elemento della list e me lo visualizza sulla label. e ok.

vorrei però che se tocco il valore della label, mi si apra una nuova interfaccia, dove visualizzo la scheda del valore. (come una rubrica telefonica per capirci, dove seleziono dall'elenco il nome, ci clicco e visualizzo il tel , la mail ecc) come faccio dentro a b4a?

grazie!

potresti utilizzare un Panel che viene visualizzato soltanto quando selezioni un elemento della List, che verrà ovviamente utilizzato come parametro di ricerca.
Sul Panel posizioni tutte le views che ti servono per i dettagli.

Per tornare alla visualizzazione della List, basta reimpostare Panel.visible=false (utilizzando un tasto oppure "cliccando" semplicemente in qualsiasi parte della schermata dei dettagli)
 

Nikeddy

Active Member
Licensed User
Longtime User
ho fatto cosi:

B4X:
Sub lblCountry_Click
park = lblCountry.text
Activity.LoadLayout("scheda")
ExecuteRemoteQuery("SELECT * FROM country WHERE n_citta='" & citta & "'", COUNTRY_POPULATION)
lbl_ncitta.Text = citta
lbl_indirizzo.Text =("indirizzo")
lbl_zona.Text =("zona") 
End Sub

ma non va... praticamente a me interessa che al click registra il contenuto in una variabile (che mi serve per fare il cerca tramite select) e poi compili le lbl con i contenuti della query.

solo che sia me la mette sopra, quindi non si vede nulla, sia non va.
 

zakker

Member
Licensed User
ho fatto cosi:

B4X:
Sub lblCountry_Click
park = lblCountry.text
Activity.LoadLayout("scheda")
ExecuteRemoteQuery("SELECT * FROM country WHERE n_citta='" & citta & "'", COUNTRY_POPULATION)
lbl_ncitta.Text = citta
lbl_indirizzo.Text =("indirizzo")
lbl_zona.Text =("zona")
End Sub

ma non va... praticamente a me interessa che al click registra il contenuto in una variabile (che mi serve per fare il cerca tramite select) e poi compili le lbl con i contenuti della query.

solo che sia me la mette sopra, quindi non si vede nulla, sia non va.

nella ExecuteRemoteQuery passi una variabile "citta" nella clausola Where che non so se esista (forse doveva essere "park" ?)

Poi non basta una ExecuteRemoteQuery per avere i risultati di una Query.... hai la sub JobDone ?
 

Nikeddy

Active Member
Licensed User
Longtime User
si ma e' usata per l'altra elaborazione (il caricamento della list) come la "riuso?"

B4X:
Sub JobDone(Job As HttpJob)
    ProgressDialogHide
    If Job.Success Then
    Dim res As String
        res = Job.GetString
        Log("Response from server: " & res)
        Dim parser As JSONParser
        parser.Initialize(res)
        Select Job.JobName
            Case COUNTRIES_LIST
                Dim COUNTRIES As List
                COUNTRIES = parser.NextArray 'returns a list with maps
                For i = 0 To COUNTRIES.Size - 1
                    Dim m As Map
                    m = COUNTRIES.Get(i)
                    'We are using a custom type named TwoLines (declared in Sub Globals).
                    'It allows us to later get the two values when the user presses on an item.
                    Dim tl As TwoLines
                    tl.First = m.Get("n_macchina")
                    tl.Second = m.Get("zona")
                    ListView1.AddTwoLines2(tl.First, tl.Second, tl)
                Next
            Case COUNTRY_POPULATION
                Dim l As List
                l = parser.NextArray
                If l.Size = 0 Then
                    lblPopulation.Text = "N/A"
                Else
                    Dim m As Map
                    m = l.Get(0)
                    lblPopulation.Text = NumberFormat2(m.Get("popolazione"),0, 0, 0, True) & " (K)"
                End If
        End Select
    Else
        Log(Job.ErrorMessage)
        ToastMessageShow("Error: " & Job.ErrorMessage, True)
    End If
    Job.Release
End Sub
 

zakker

Member
Licensed User
Case COUNTRY_POPULATION
Dim l As List
l = parser.NextArray
If l.Size = 0 Then
lblPopulation.Text = "N/A"
Else
Dim m As Map
m = l.Get(0) ???

lbl_ncitta.Text = m.get("n_citta") <----------
lbl_indirizzo.Text =m.get("indirizzo") <----------
lbl_zona.Text =m.get("zona") <----------

lblPopulation.Text =
NumberFormat2(m.Get("popolazione"),0, 0, 0, True) & " (K)"
End If
 

Nikeddy

Active Member
Licensed User
Longtime User
allora...ho modificato la query:

B4X:
lblCountry_Click
   
    park = lblCountry.text
    Activity.LoadLayout("scheda")
    ExecuteRemoteQuery("SELECT * FROM elenco WHERE n_macchina='" & park & "'", elenco)
    lbl_macchina.Text = park       
                   
           
End Sub

e dentro il jobdone ho creato un case:

B4X:
Case elencopark
                Dim l As List
                l = parser.NextArray
                If l.Size = 0 Then
                    lblPopulation.Text = "N/A"
                Else
                    Dim m As Map
                    m = l.Get(0)
                   
lbl_ncitta.Text = m.get("n_citta")
lbl_indirizzo.Text =m.get("indirizzo")
lbl_zona.Text =m.get("zona")
                   
                End If

corretto?
 

zakker

Member
Licensed User
B4X:
Case elencopark
                Dim l As List
                l = parser.NextArray
                If l.Size = 0 Then
                    lblPopulation.Text = "N/A"
                Else
                    Dim m As Map
                    m.Initialize
                    for each m as Map in l
                         lbl_ncitta.Text = m.get("n_citta")
                         lbl_indirizzo.Text =m.get("indirizzo")
                         lbl_zona.Text =m.get("zona")
                    next
                End If

Assumendo che il resto del JobDone sia esatto e correggendo nel RemoteQuery "elenco" con "elencopark"
 
Last edited:

Nikeddy

Active Member
Licensed User
Longtime User
una cosa, come posso quindi usare i panel come dici?

cosi da visualizzare una "scheda"?

Activity.LoadLayout("scheda") me la apre, ma il problema che sotto resta la precedente, cosi mischiando tutto! :(
 

zakker

Member
Licensed User
una cosa, come posso quindi usare i panel come dici?

cosi da visualizzare una "scheda"?

Activity.LoadLayout("scheda") me la apre, ma il problema che sotto resta la precedente, cosi mischiando tutto! :(

usi il Designer per crearti i layout?
 

Nikeddy

Active Member
Licensed User
Longtime User
ecco comunque il progetto :

B4X:
#Region Module Attributes
    #FullScreen: False
    #IncludeTitle: True
    #ApplicationLabel: ParkEddy
    #VersionCode: 1
    #VersionName:
    #SupportedOrientations: portrait
#End Region

'Activity module
Sub Process_Globals
    Private COUNTRIES_LIST = "countries_list", COUNTRY_POPULATION = "country_population" As String, elencopark = "elencopark" As String
End Sub

Sub Globals
    Type TwoLines (First As String, Second As String)
    Dim lblPopulation As Label
    Dim ListView1 As ListView
    Dim lblCountry As Label
    Dim park As String
    Dim lbl_indirizzo As Label
    Dim lbl_ubicazione As Label
    Dim lbl_zona As Label
End Sub

Sub Activity_Create(FirstTime As Boolean)
    Activity.LoadLayout("1")
    FetchCountriesList
End Sub
Sub FetchCountriesList
    ProgressDialogShow("Fetching list of macchine")
    'Gets all the available countries
    ExecuteRemoteQuery("SELECT n_macchina, zona FROM elenco ORDER BY n_macchina", COUNTRIES_LIST)
End Sub


Sub ListView1_ItemClick (Position As Int, Value As Object)
    Dim tl As TwoLines
    tl = Value
    lblCountry.Text = tl.Second
    lblPopulation.Text = "Calling server..."
    ExecuteRemoteQuery("SELECT tot_euro FROM Elenco WHERE n_macchina='" & tl.First & "'", COUNTRY_POPULATION)
End Sub

Sub ExecuteRemoteQuery(Query As String, JobName As String)
    Dim job As HttpJob
    job.Initialize(JobName, Me)
    job.PostString("https://www.xxxxxx.com/proviamo/execute.php", Query)
End Sub

Sub JobDone(Job As HttpJob)
    ProgressDialogHide
    If Job.Success Then
    Dim res As String
        res = Job.GetString
        Log("Response from server: " & res)
        Dim parser As JSONParser
        parser.Initialize(res)
        Select Job.JobName
            Case COUNTRIES_LIST
                Dim COUNTRIES As List
                COUNTRIES = parser.NextArray 'returns a list with maps
                For i = 0 To COUNTRIES.Size - 1
                    Dim m As Map
                    m = COUNTRIES.Get(i)
                    'We are using a custom type named TwoLines (declared in Sub Globals).
                    'It allows us to later get the two values when the user presses on an item.
                    Dim tl As TwoLines
                    tl.First = m.Get("n_macchina")
                    tl.Second = m.Get("zona")
                    ListView1.AddTwoLines2(tl.First, tl.Second, tl)
                Next
            Case COUNTRY_POPULATION
                Dim l As List
                l = parser.NextArray
                If l.Size = 0 Then
                    lblPopulation.Text = "N/A"
                Else
                    Dim m As Map
                    m = l.Get(0)
                    lblPopulation.Text = NumberFormat2(m.Get("tot_euro"),0, 0, 0, True) & " (K)"
                End If
            Case elencopark
                 Dim l As List
                l = parser.NextArray
                If l.Size = 0 Then
                    lblPopulation.Text = "N/A"
                Else
                    Dim m As Map
                    m.Initialize
                    For Each m As Map In l
Dim lbl_indirizzo As Label
    Dim lbl_ubicazione As Label
    Dim lbl_zona As Label
                   
                    lbl_indirizzo.Text =m.Get("indirizzo")
                    lbl_zona.Text =m.Get("zona")
                    lbl_ubicazione.Text =m.Get("ubicazione")
                   
                    Next
                End If

                   
        End Select       
               
    Else
        Log(Job.ErrorMessage)
        ToastMessageShow("Error: " & Job.ErrorMessage, True)
    End If
    Job.Release
End Sub

Sub Activity_Resume

End Sub

Sub Activity_Pause (UserClosed As Boolean)

End Sub

Sub lblCountry_Click
   
    park = lblCountry.text
    Activity.LoadLayout("schedaPark")
    ExecuteRemoteQuery("SELECT * FROM elenco WHERE n_macchina='" & park & "'", elencopark)
    lbl_park.Text = park       
                   
           
End Sub




Sub cmd_torna_Click
    Activity.LoadLayout("1")
    FetchCountriesList
   
End Sub
 

Nikeddy

Active Member
Licensed User
Longtime User
si ho fatto e funziona!!!!

ora però devo risolvere con il case, e il visualizzare la scheda, perché non riesco a riempire le label
 

zakker

Member
Licensed User
si ho fatto e funziona!!!!

ora però devo risolvere con il case, e il visualizzare la scheda, perché non riesco a riempire le label

che problemi/errori ti dà? ...a parte che hai dichiarato 2 volte le label? (toglile dal case)
 

Nikeddy

Active Member
Licensed User
Longtime User
allora, per la query, che compila le lbl , nell'array ci va (infatti il debugger lo visualizza) ma le lbl non si compilano.
 

zakker

Member
Licensed User
allora, per la query, che compila le lbl , nell'array ci va (infatti il debugger lo visualizza) ma le lbl non si compilano.

metti un breakpoint sul case elencopark ed esegui passo passo... vedi se passa dall'else o meno
 

Nikeddy

Active Member
Licensed User
Longtime User
uao!!! funziona! e sto imparando tantissimo!

ora ho una necessità, vorrei creare un grafico con i valori, praticamente ho una tabella con su

Numero - Euro - Data
1 30 1/12/2015
1 40 2/1/2016
1 50 4/2/2016
ecc..

vorrei far in modo di poter raggruppare per mese la cifra, e creare un grafico in base al mese.

come faccio?
 

Nikeddy

Active Member
Licensed User
Longtime User
no troppo difficile, vado per gradi.

come inserisco nel sistema un conteggio dei valori della tabella?

io facevo aggiungendo il count...ma mi da errore!
 
Top