Italian barra di attesa

3394509365

Active Member
Licensed User
Longtime User
Buonasera, vorrei inserire nella mia app, una barra di attesa o, avete presente quei "circolini" che girano durante le attese?

Mentre faccio la ricerca su un data base vorrei inserirne una per far capire all' utente che c' è da aspettare.

Un' altra cosa, deve essere un thread ?
 

3394509365

Active Member
Licensed User
Longtime User
ok ho visto l' esempio

l' ho messo nell' activity resume

B4X:
For Each v As View In Activity.GetAllViewsRecursive
        If v.Tag Is B4XLoadingIndicator And v.Visible = True Then
            Dim x As B4XLoadingIndicator = v.Tag
            x.Show
        End If
    Next

poi quando mi serve lo faccio vedere con questo comando

B4X:
B4XLoadingIndicator1.Show

e lo nascondo con questo:

B4X:
B4XLoadingIndicator1.hide

ma è giusto così? a me sembra che così sia semore in movimento o sbaglio ?

se no devo metterlo sotto una routine ?
 

Sagenut

Expert
Licensed User
Longtime User
Non sò dirti in quanto non ho mai utlizzato tale funzione.
Penso che sia come avere una qualsiasi view nel layout e la rendi solo visibile o meno.
Per fare in modo che la view esista effettivamente solo quando la vuoi credo che dovresti creare un layout con solo la view dell'animazione e quando ne hai bisogno creare al volo un panel sul quale caricherai quel layout.
Quando l'animazione non ti serve più rimuovi il panel e quindi anche la view sarà rimossa totalmente.
Però credo che anche avere l'animazione sempre attiva non crei grossi problemi e ti risparmia tutta la fatica.
Però vedi tu le tue necessità.
 

3394509365

Active Member
Licensed User
Longtime User
ok, provo, praticamente, io seleziono una voce da uno spinner, il quale lancia una ricerca in base alla voce selezionata su una directory.
Faccio la ricerca per vedere quanti file ci sono con lo stesso nome simile
Lo spinner durante tutta l' attesa della ricerca mi rimane aperto ed è fastidioso per chi lo vede, perchè non sa se ha preso ilcomando della query oppure no. vorrei che una volta premuto lo spinner si nascondesse e apparisse il cerchiolino di attesa.

Sto provando in tutti i modi ma lo spinner non si nasconde.

se prima non finisce


B4X:
Sub spnRepertorio_ItemClick (Position As Int, Value As Object)
    spnRepertorio.Visible=False
  
    lblHelp.Color=Colors.Transparent

    'é il titolo selezionato per la foto da salvare
    SongTitle =spnRepertorio.SelectedItem
  
    ListaTitoliGiaPresenti
      
    spnRepertorio.Visible=True
  
    End Sub



Sub ListaTitoliGiaPresenti
  
    B4XLoadingIndicator1.Show
  
  
    ' azzero variabile
    NumMaxTitoloAttuale=0
  
  
    options.Initialize
    options.AllowMultiSelection = False
  
    dialog.Title = "Existing pages "
  
  
    Dim Items As List
    Items.Initialize
          
  
    '  prima cerco se magari ha i titolo singolo senza p
  
    If File.Exists(FullPath, SongTitle & ".jpg") = True Then
        'lo metto nell' array
        options.Options.Add(SongTitle & ".jpg")
        'trovato già un titolo singolo
        NumMaxTitoloAttuale = NumMaxTitoloAttuale + 1
    End If
      
    'Controllo che non ci sia anche una pagina doppia, ma è chiaramente un errore da segnalare
          
    Items = File.ListFiles(FullPath)
          
    For Each line As String In Items
        Dim s() As String = Regex.Split("_P", line)
        Dim Name As String = s(0).Trim
              

                      
        If Name = SongTitle  Then
            'lo metto nell' array
            options.Options.Add(line)
            NumMaxTitoloAttuale = NumMaxTitoloAttuale + 1
'         
        End If
    Next

  
    If NumMaxTitoloAttuale > 0 Then
        lblListaPresenti.Text= "Show the pages already present"
    Else
        lblListaPresenti.Text= ""
    End If
  
    'options.Options.Sort(False)
' 
'    Wait For (dialog.ShowTemplate(options, "OK","","")) Complete (Result As Int)
'    ''
    lblHelp.Text="Current title:" & SongTitle
      
    B4XLoadingIndicator1.Hide
      
End Sub
 

Sagenut

Expert
Licensed User
Longtime User
Ho modificato il mio post precedente.
Prova così
B4X:
Sub spnRepertorio_ItemClick (Position As Int, Value As Object)
    spnRepertorio.Visible=False

    lblHelp.Color=Colors.Transparent

    'é il titolo selezionato per la foto da salvare
    SongTitle =spnRepertorio.SelectedItem

    ListaTitoliGiaPresenti("Terminato")
    Wait For Terminato
   
    spnRepertorio.Visible=True

    End Sub



Sub ListaTitoliGiaPresenti (evento as string)

    B4XLoadingIndicator1.Show


    ' azzero variabile
    NumMaxTitoloAttuale=0


    options.Initialize
    options.AllowMultiSelection = False

    dialog.Title = "Existing pages "


    Dim Items As List
    Items.Initialize
       

    '  prima cerco se magari ha i titolo singolo senza p

    If File.Exists(FullPath, SongTitle & ".jpg") = True Then
        'lo metto nell' array
        options.Options.Add(SongTitle & ".jpg")
        'trovato già un titolo singolo
        NumMaxTitoloAttuale = NumMaxTitoloAttuale + 1
    End If
   
    'Controllo che non ci sia anche una pagina doppia, ma è chiaramente un errore da segnalare
       
    Items = File.ListFiles(FullPath)
       
    For Each line As String In Items
        Dim s() As String = Regex.Split("_P", line)
        Dim Name As String = s(0).Trim
           

                   
        If Name = SongTitle  Then
            'lo metto nell' array
            options.Options.Add(line)
            NumMaxTitoloAttuale = NumMaxTitoloAttuale + 1
'      
        End If
    Next


    If NumMaxTitoloAttuale > 0 Then
        lblListaPresenti.Text= "Show the pages already present"
    Else
        lblListaPresenti.Text= ""
    End If

    'options.Options.Sort(False)
'
'    Wait For (dialog.ShowTemplate(options, "OK","","")) Complete (Result As Int)
'    ''
    lblHelp.Text="Current title:" & SongTitle
   
    B4XLoadingIndicator1.Hide
     callsubdelayed(me, evento)
End Sub
 
Last edited:

3394509365

Active Member
Licensed User
Longtime User
tantissime grazie.

Prima di provarlo nella mia app ho cercato di capire che hai fatto.

nel tuo codice ho messo dei commenti, puoi vedere se è giusto quello che ho intuito ?


B4X:
Sub Spinner1_ItemClick (Position As Int, Value As Object)
    Sleep(50) ''perchè si mette ?
    B4XLoadingIndicator1.Show
    Load
    Wait For Loading_Completed ' aspetta finchè non finisce il conteggio nella routine Load ?
    B4XLoadingIndicator1.Hide
    Msgbox("Completato", "") 'ignore
End Sub

Sub Load
    Dim now As Long = DateTime.Now
    Do Until DateTime.Now - now >= 3 * DateTime.TicksPerSecond
        Sleep(30)' questo é un ritardo forfettario? o attende il termine effettivo del lavoro e l' hai messo solo per simulare il lavoro della ricerca ?
    Loop
   
    CallSubDelayed(Me, "Loading_Completed")' quando finisce riprende da dove aveva mollato ?
   
   
End Sub

grazie ancora
 

LucaMs

Expert
Licensed User
Longtime User
Sleep(50) ''perchè si mette ?
L'ho messo solo perché hai scritto:
Lo spinner durante tutta l' attesa della ricerca mi rimane aperto
Non l'ho provato ma è possibile. Lo Sleep dovrebbe consentirgli di chiudersi.

Wait For Loading_Completed ' aspetta finchè non finisce il conteggio nella routine Load ?
Sì, l'esecuzione proseguirà dopo il Wait For solo al completamente della routine Load (che nel tuo caso dovrà essere l'esecuzione della query).

Sleep(30)' questo é un ritardo forfettario? o attende il termine effettivo del lavoro e l' hai messo solo per simulare il lavoro della ricerca ?
Esatto, simula il tempo eseguito dalla query.

CallSubDelayed(Me, "Loading_Completed")' quando finisce riprende da dove aveva mollato ?
Sì, simula la conclusione dell'esecuzione della query.
 

3394509365

Active Member
Licensed User
Longtime User
l' ho provato, può essereche in debug faccia ancora lo stesso difetto ?

cmq sembra che in release funziona
 
Top