Italian poter utilizzare componenti listview in una altra activity

andy801

New Member
ciao a tutti! ho un problema con il mio progetto app! in pratica mi trovo in punto in cui sono riuscito a cercare all'interno di cartelle i file con pattern .mp3 e a ordinarli in una Listview...il problema ora è che cliccando su una linea della listview ho uno startactivity della pagina dove ho la schermata "iPod" ma io in quest'altra activity devo in qualche modo fare il load del file .mp3 che mi interessa (e che seleziono nella schermata precedente (nelle listview)). come faccio quindi a passare in automatico a MediaPlayer1.Load(file.DirAssets,"...") il file da caricare al momento del click sulla precedente listview line?

spero di essere stato abbastanza chiaro.... Grazie mille!
 

LucaMs

Expert
Licensed User
Longtime User
abbastanza :)

mi manca solo una informazione: nella listview hai inserito tutto il percorso al file mp3? Non sarebbe molto carino da vedere.

Dovresti usare il metodo AddSingleLine2(Titolo, PercorsoCompleto), in cui Titolo sarà una variabile String che conterrà soltanto il nome del file, senza percorso ed estensione .mp3, PercorsoCompleto appunto tutto il percorso, nome ed estensione file compresi.

A questo punto, nell'evento:
B4X:
Sub lvCanzoni_ItemClick (Position As Int, Value As Object)

' Value conterrà il percorso completo, che tu potrai inviare ad una routine della seconda Activity con:
CallSubDelayed2(NomeSecondaActivity, "NomeRoutineNellaSecondaActivity", Value)

End Sub


Nella seconda Activity avrai la routine:
B4X:
Public Sub NomeRoutineNellaSecondaActivity(Canzone As String)
   ' suona Canzone
End Sub
 

andy801

New Member
ho provato ma non funziona....ti posto i codici così ci capiamo meglio :)
questo è il Main

B4X:
Sub Activity_Create(FirstTime As Boolean)
Activity.LoadLayout("pag_scelta_audio_reg_add")
flist = WildCardFilesList2(File.DirAssets,"*.mp3",True, True)
  If flist.Size=0 Then
       Log("no files matching the pattern were found.")
    Else
    For i = 0 To flist.Size -1
       Dim filename As String
       filename = flist.Get(i)
        ListView1.AddSingleLine(filename)
    Next
    End If
End Sub
con questo codice prendo i file che ho cercato con WildCardFilesList2 (quindi solo quelli .mp3) e li carico in una listview (nella listview compare nomecanzone.mp3 )
poi l'activity per riprodurre é fatta così:

qui la pagina successiva, l'activity Riproduci

B4X:
Sub Activity_Create(FirstTime As Boolean)
    
    If FirstTime Then
        MediaPlayer1.Initialize( )
       
        MediaPlayer1.Load(File.DirAssets," come far arrivare qui il file selezionato nella listview???")
        timer1.Initialize("timer1", 1000)
       
    End If
    Activity.LoadLayout("1")
    Looping_CheckedChange(Looping.Checked) 'set the default value
End Sub

poi ovviamente ci sono altre funzioni per i play, pausa e timer che non rappresentano un problema
insomma come faccio a mettere la mia selezione nel load di mediaplayer?
 

LucaMs

Expert
Licensed User
Longtime User
Dato che i file li prendi tutti dalla DirAssets puoi fare così (ma sarebbe più corretto passare alla routine anche il percorso, per un eventuale riutilizzo):
B4X:
Sub ListView1_ItemClick (Position As Int, Value As Object)
    CallSubDelayed2(Riproduci, "Suona", Value)
End Sub


Nella Activity Riproduci:
B4X:
Public Sub Suona(FileName As String)
   MediaPlayer1.Load(File.DirAssets, FileName)
End Sub
 

andy801

New Member
questo ok ma come faccio a fargli capire da solo qual è FileName?

cmq ti mando una mail con tutto! se hai tempo magari dagli una occhiata (ti sto sfruttando più del dovuto scusa :) )
 

LucaMs

Expert
Licensed User
Longtime User
Non c'è problema, basta allegare un centone alla email :D

[P.S. io non posso caricare i tuoi file - tra l'altro, per inviare un progetto, dovresti usare Export As Zip nel menu File - perché ho una versione più vecchia della tua 3.82]


Come ti ho scritto nella #2, devi usare lvCanzoni.AddSingleLine2(Titolo, PercorsoCompleto).
Nell'evento lvCanzoni_ItemClick riceverai il PercorsoCompleto (quindi diciamo una specie di puntatore al file da suonare) nel parametro Value.


[EDIT] come non detto: il MediaPlayer usa due parametri distinti per il percorso ed il nome del file, quindi, ancora più semplice:
lvCanzoni.AddSingleLine(Titolo) più i due pezzetti di codice nel #4]



Ti basterebbe applicare i suggerimenti, ma leggo comunque la tua email e poi invio fattura :p
 
Last edited:
Top