Italian La prossima settimana, VACANZE... ma per ora vado avanti

LucaMs

Expert
Licensed User
Longtime User
Quindi non ti visualizza nemmeno: ListView1.AddSingleLine("User:" & i) ?

Sicuro che ti visualizzi la ListView1? Cambiagli i colori! (usa anche ListView1.BringToFront)

(ora ti rompo le scatole, ma ti servirà :): cerca di dare a variabili e view nomi specifici, non generici. La lista delle chiamate lstCalls, la ListView1 lvCalls...
se rileggi tu stesso il codice dopo tanto tempo, farai molto prima a capire cosa faccia il codice!)


[e un log("Call.Size: " & Call.Size)]
 

CyclopDroid

Well-Known Member
Licensed User
Longtime User
Sono io che ho sbagliato.
Così funziona ;)

B4X:
Sub InfoVol_Click
    Dim Calls As List
Dim CallLog As CallLog
Calls = CallLog.GetAll(10) 'Get the last 10 calls
ListView1.Initialize("listview1")

''ListView1.Top=0
''ListView1.Left=0
''ListView1.Height=100%y
''ListView1.Width=100%x
''ListView1.Visible=True

For i = 0 To Calls.Size - 1
    Dim C As CallItem
    C = Calls.Get(i)
    Dim callType, name As String

    Select C.callType
    'Ricvute
        Case C.TYPE_INCOMING
            callType="Incoming"
    'Perse
        Case C.TYPE_MISSED
            callType = "Missed"
    'Fatte
       '' Case c.TYPE_OUTGOING
       ''     callType = "Outgoing"
    End Select
    name = C.CachedName
    'Creo quadro
   
    If name = "" Then name = "N/A"
    'Cerco Foto
   
    Dim Contacts1 As Contacts
    Dim listOfContacts As List
    listOfContacts = Contacts1.FindByName(name, False)
    For ii = 0 To listOfContacts.Size - 1
        Dim Contact As Contact
        Contact = listOfContacts.Get(ii)
        Log(Contact) 'will print the fields to the LogCat
        Dim photo As Bitmap
        photo = Contact.GetPhoto
      
    Next
    If name="N/A" Then
        photo=LoadBitmap(File.DirAssets,"NoPhoto.png")
    End If

    ListView1.TwoLinesAndBitmap.Label.TextColor=Colors.Blue
    ListView1.TwoLinesAndBitmap.Label.TextSize=10
    ListView1.AddTwoLinesAndBitmap(name & " - (" & callType & ") - Date:" & DateTime.Date(C.Date) & " - Time:" & DateTime.Time(C.Date) , C.Number, photo)
  
    Log("Number=" & C.Number & ", Name=" & name _
        & ", Type=" & callType & ", Date=" & DateTime.Date(C.Date) & ", Ora=" & DateTime.Time(C.Date))
Next
ListView1.SetBackgroundImage(LoadBitmap(File.DirAssets,"SfondoLista.png"))
Activity.AddView(ListView1, 0, 0, 100%x, 100%y)
End Sub
 

CyclopDroid

Well-Known Member
Licensed User
Longtime User
Che tu sappia, è possibile assegnare un colore ad ogni singolo dato della ListView? Nel mio caso, mi servirebbecolorare di Rosso le chiamate perse e di Verde (o blu) quelle con risposta
 

LucaMs

Expert
Licensed User
Longtime User
No. Puoi avere un colore per la prima riga, cioè la prima label, e uno per la seconda, ma appartenenti allo stesso item.
B4X:
ListView1.TwoLinesAndBitmap.Label.TextColor = ...
ListView1.TwoLinesAndBitmap.SecondLabel.TextColor = ...

Fai un po' d'allenamento e usa CustomListView (oppure CheckList), perché raramente la ListView è sufficiente.

In entrambe queste, tu puoi costruire da codice ogni Item come ti pare e, mi sembra in entrambe, puoi invece caricarne un layout già pronto.
 

CyclopDroid

Well-Known Member
Licensed User
Longtime User
Vabbè passo :p
Tanto a me interessavano solamente le chiamate perse :D
L'App sembra terminata e senza errori (pensa che sul Player c'è la versione non fiunzionante :eek::D... tanto NON se la scarica nessuno :( e, se lo facessero, avrebbero il nuovo aggiornamento con questa cosa in più ;)).
Unica cosa che proprio non riesco a capire è perché l'app viene terminata dai programmi che ripuliscono il sistema, bloccandomi il widget :(:(:(
Le ho provate tutte ma, se lancio uno di questi, me la tronca di netto.
Come detto, io posso ache ripremere il widget... ma mi da fastidio la cosa (anche perché, non accorgendomene, continuo a vedere l'icona di Attivo sullo schermo) e, comunque, gli eventuali acquirenti, se la prenderebbero con me che il telefono squillava ed il volume non si alzava. :confused:
 

CyclopDroid

Well-Known Member
Licensed User
Longtime User
Beh! non direi :oops:
Tutti coloro che conosco (tranne tu :D) hanno installato una App per ottimizzare lo smarth e/o ripulirlo dalle cose che occupano inutilmente memoria. (Tipo CCleaner su PC). Alcune di queste App, fanno tutto senza nemmeno chiedertelo (tanto sono cose che non influiscono sul sistema e non sono importanti).
Detto questo, noto che la mia App, chiudendosi, rientra a far parte di quelle giudicate inutili, che occupano spazio e che nnon sono importanti, agli occhi di queste App :(:(:D:D
La cosa che mi fa 'ncazzare è che TUTTI i widget non ne risentono... solo il mio. Quindi, dovrà esserci qualche istruzione o Sub nella Main che possa csptare l'arresto del programma da uno esterno. o_O
 

CyclopDroid

Well-Known Member
Licensed User
Longtime User
Mah! io ho atteso un bel po e poi ho provato a chiamare... beh!, il volume rimaneva bassissimo, indi il widget era stato interrotto. :( Come detto, basta ricliccarci sopra per rittivarlo (quindi ricaricare il Menu).
Nello schermo il Widget resta e, se lo si clicca, risponde.... il problema è che vengono cancellati tutti i dati e viene proprio terminata l'App (ovvero la Main si stoppa ed esce fuori dal debug).
 

LucaMs

Expert
Licensed User
Longtime User
Beh, in questo momento sono più rinco del solito per via dello sviluppo che sto tendando e quindi non ricordo come rimane in ascolto, tramite un servizio, mi pare.

Ad ogni modo, l'unica strada che vedo, molto vagamente, è far ripartire il servizio (o il main?) quando questo viene chiuso; quindi nel Service_Destroy (o Activity_Pause).
 

CyclopDroid

Well-Known Member
Licensed User
Longtime User
Scusa il disturbo. ;)
Meglio che ti lascio al tuo sviluppo :D.
Comunque, giusto per la croaca, avevo già provato quelle strade.
1) Nel Service_Destry non va bene perché, quando elimino il widget dallo screen è li che si ferma (e invece di chiudersi, riprirebbe). Comunque, ho provato a farlo e anche a mettere un break point li ma, quando viene chiuso dall'esterno, non vi entra.
2) Anche nell'Activity_Pause, la chiusura dall'esterno, non viene intercettata.
Buon lavoro ;)
 

LucaMs

Expert
Licensed User
Longtime User
Non disturbi; sono io che "per rilassarmi", faccio una pausa venendo sul sito.

Io ancora non ho capito come funziona il tuo (e nemmeno tanto quelli in generale, perché per il momento non mi interessano).
Il tuo apre un'activity, la Main, se ho capito bene, mentre io immagino un widget che abbia come sola interfaccia grafica il widget stesso.
Poi apre anche un menu (o menu e main sono lo stesso "oggetto"?).

Mah! Poi aggiungici che a me la vecchia versione nemmeno funziona...! (Hai messo una nuova versione sul market? Così la provo).

Purtroppo non so aiutarti. Ci sarà qualcuno che ha smanettato con i Widget!!!
 

maxware

Well-Known Member
Licensed User
Longtime User
buongiorno a tuttii
Visto che oggi dovrei riuscire a superare la soglia delle 200 app vendute , mi sono giocato i primi 20 euro di pubblicità con AdMod.
Creato utente ,,bla...bla, caricato 20 euro e creato la campagna. Per prova mi gioco al max 2 euro al giorno per costo a clic di 0.10 Euro...
Già che c'ero ho inserito il seguente messaggio nella descrizione dell'app " ***** Dal 1 Gennaio 2015 vi sarà un aumento di prezzo ***** "..ancora sono indeciso tra 14,90 e 19,90...ma !!!!!!
 

LucaMs

Expert
Licensed User
Longtime User
Buongiorno, Mamo

Beh, intanto vediamo se la pubblicità avrà effetto o meno (ti fanno sapere su quanti dispositivi finirà la pubblicità?).

Per il prezzo io metterei 14,90, inizialmente. Fai sempre in tempo ad aumentarlo o diminuirlo.
 

CyclopDroid

Well-Known Member
Licensed User
Longtime User
Anche io, Mamo, metterei 14,90... almeno per non tramortire troppo.
Sono stato tutto il fine settimana con la connessione fuorigioco :mad:
Posto il video di come, le App che ripuliscono, mi fanno chiudere il Widget.


https://www.dropbox.com/s/awo8diykjmrbbj7/ChiusuraWidget.flv?dl=0


A parte che, poi (e non capisco), dopo qualche ora, questo, mi si chiude da solo :eek:,
Ora ho provato a mettere un timer per richiamare il service ogni secondo (allinterno del service stesso con uno StartService(Me) ...speriamo funzioni :(:(
 

LucaMs

Expert
Licensed User
Longtime User
Non penso che funzioni: il timer è dichiarato nel service e se questo non è attivo non dovrebbe esserlo nemmeno il timer.

Difficile che qui qualcuno ti aiuti a risolvere, se non ci sono riusciti nemmeno nel Questions (leggi: Erel).
 

LucaMs

Expert
Licensed User
Longtime User
Ci sono molte persone che "litigano" con i DB e relative interfacce grafiche (questo è uno degli ultimi, ad esempio).

Inoltre, sarebbe uno strumento che utilizzerei io stesso, per velocizzare la "produzione".

E non sarebbe solo questo; una volta che hai una classe, ad esempio "Impiegato", si potrà scrivere codice molto semplice:

Impiegato.Nome = "Massimo"
Impiegato.Stipendio = "troppo basso" :D
Impiegato.Salva


Come non detto: Salva da solo non è sufficiente.
O meglio, avevo preparato una Sub Save(AllowUpdate), impostato a True AllowUpdate, se esisteva già una PK con gli stessi valori, eseguiva un Update, altrimenti un Insert.
Ottimo; peccato che ci sia un difettuccio: se la tabella non ha una chiave primaria? Sigh e pure sob.
In questo caso, un Update avrà bisogno di una clausola Where.

Come diceva qualcuno: "Gli è tutto sbagliato, gli è tutto da rifare" :)
 

CyclopDroid

Well-Known Member
Licensed User
Longtime User
Non penso che funzioni: il timer è dichiarato nel service e se questo non è attivo non dovrebbe esserlo nemmeno il timer.

Difficile che qui qualcuno ti aiuti a risolvere, se non ci sono riusciti nemmeno nel Questions (leggi: Erel).
Infatti era quello che pensavo, anche se il Service lo richiamo ad ogni secondo facendo comparire un led che lampeggia:


B4X:
Sub WidTimer_Tick
    If Menu.Led=True Then
        rv.SetImage("imgLed",LoadBitmap(File.DirAssets,"imgOff.png"))
        Menu.Led=False
    Else
        rv.SetImage("imgLed",LoadBitmap(File.DirAssets,"imgOn.png"))
        Menu.led=True
    End If
    StartService(Me)
End Sub

Questo funziona per un po di tempo ma, a random, mi accorgo che smette di lampeggiare e, quindi, il Service non risponde più e con lui il Widget :(

Dove dovrei metterlo questo timer per farlo funzionare sempre? :confused:
Eppure, l'unica ExitApplication che ho, è quella nella Main, che richiamo quando si elimina il Widget dallo schermo:

Service
B4X:
Sub rv_Disabled
If Main.FirstClick=True Then
    ToastMessageShow("The Widget is Closed",True)
    Log("CHIUSO")
       CancelScheduledService("")
       StopService("")
       Main.DestroyApp=True
       StartActivity(Main)
  End If
End Sub

Main
B4X:
Sub Activity_Create(FirstTime As Boolean)
If DestroyApp=True Then
    Activity.Finish
    Activity.CloseMenu 
    ExitApplication
End If
EndSub

Quindi, una volta che il Service non rispone (quindi il Timer si blocca), basta che riprema sopra questo (nello schermo), per farmi aprire la Activity Menu e riprende a funzionare. :eek:
...eppure, in quell'Activity, ho solo la scelta dei valori (immagini) e basta! :confused:
 
Last edited:

CyclopDroid

Well-Known Member
Licensed User
Longtime User
Ecco la lista del Debug:


B4X:
** Activity (main) Create, isFirst = true **
** Activity (main) Resume **
** Activity (main) Pause, UserClosed = true **
** Service (srv) Create **
** Service (srv) Start **
android.appwidget.action.APPWIDGET_UPDATE
** Service (srv) Start **
** Service (srv) Start **
** Service (srv) Start **
** Service (srv) Start **
** Service (srv) Start **
CLICCATO
** Activity (menu) Create, isFirst = true **
(Menu, 84) FullScreen or IncludeTitle properties in layout file do not match the activity attributes settings. (warning #1004)
** Activity (menu) Resume **
** Service (srv) Start **
** Service (srv) Start **
** Service (srv) Start **
** Service (srv) Start **
** Service (srv) Start **
** Service (srv) Start **
KeyCode=4
** Service (srv) Start **
** Activity (menu) Pause, UserClosed = true **
** Service (srv) Start **
** Service (srv) Start **
** Service (srv) Start **
** Service (srv) Start **
** Service (srv) Start **
** Service (srv) Start **
** Service (srv) Start **
** Service (srv) Start **
** Service (srv) Start **
** Service (srv) Start **
** Service (srv) Start **

Come vedete, a random, il Service si ferma e, l'ultimo Log è Service (srv) Start
Se io, stoppo il Debug, oppure chiudo il Widget, appare come dovrebbe:

** Service (srv) Destroy **

e termina. giustamente.
...allora, perché si blocca imoprovvisamente ed in maniera casuale e chiude il Service, senza passare da queso?:eek:
 
Top