Italian Problemino su Widget... alle prime armi su questi.

CyclopDroid

Well-Known Member
Licensed User
Longtime User
Sto facendo una semplicissima App e vorrei utilizzare i Widget ma mi trovo già bloccato.
Allora, ho la mia Activity vuota e un mio Service Module.
Ho creato un piccolo Design in questo con un Panel, una imageview e una variabile Int.
Quando vado a dichiarare gli oggetti, non ho problemi ma, qunando inserisco il controllo sulla variabile all'interno del Click della immagine, ecco spuntare gli errori sulla dichiarazione di questi:confused:
Come mai?

PS: Mi correggo, l'errore me lo da anche se provo a caricare un'immagine dal DirAssets. :(

Ecco il piccolissimo codice... come posso fare per far visualizzare il bottone On o Off in un Widget?

https://www.dropbox.com/s/mdzy5a4jhekk1me/B4AExample.zip
 
Last edited:

CyclopDroid

Well-Known Member
Licensed User
Longtime User
Oltre a svariati errori, mi sono accorto che non accetta le Imageview (ma forse sonoi che non sono capace per i Widget :p), comunque, dichiarando l'oggetto come Bitmap, non mi ha dato problemi.
Ora vediamo se funziona. (ma è tanto per provare) :D
Il mio game l'ho messo un giorno da parte, perché ho perso 2 giorni a reinstallare Windows 8.1 (dopo che mi aveva causato un po di casini e ho "Aggiornato il PC"... ma scrivere "ReInstalla Widows" no eh!:mad:. Ho perso ore ed ore ad installare l'Upgrade e, all'ultimo riavvio, mi diceva che non poteva aggiornare e ripristinava il vecchio sistema... due giorni di incaz....ure e smadonnamenti! (per non parlare della reinstallazione dei software, B4A compreso e riconfigurazione di tutto) :mad:
PS: scusate lo sfogo :D
 

LucaMs

Expert
Licensed User
Longtime User
A chi lo dici... io sto tremando... non mi funziona più il ripristino!

comunque, dicevo di postare quello che stai provando, il widget.


[P.S. sto leggendo il tutorial di Erel sui Widget: la ImageView è consentita]
 
Last edited:

CyclopDroid

Well-Known Member
Licensed User
Longtime User
:( Niente. Ho inserito un Panel come richiesto ma, quando lancio si ferma sul Service Create e, se vado sopra, mi dice "BitmapDrawable is not supported"

B4X:
rv = ConfigureHomeWidget("Widget", "rv", 0, "Bottoni",True)

PS: h messo il Link al primo thread (non ho ancora capito come si fa a mettere link ed immagini che si vedono direttamente nel forum)
 

CyclopDroid

Well-Known Member
Licensed User
Longtime User
....ok mi rispondo sempre da solo :oops::D
Non accetta l'inserimento dell'immagine nel Panel :confused:
Spero che mantenga la trasparenza.
 

CyclopDroid

Well-Known Member
Licensed User
Longtime User
Help. Perché non mi riconosce l'evento Click? :confused:
B4X:
Sub Premi_Click

    If OnOff=0 Then
        premi.Initialize(File.DirAssets, "OnlyOn.png")
        rv.UpdateWidget
        OnOff=1
    Else
        premi.Initialize(File.DirAssets, "OnlyOff.png")
        rv.UpdateWidget
        OnOff=0
End If


e come si fa a rendere l'immagine ridimensionabile, nei Widget? (Se clicco mi dice Ridimesiona... ma resta sempre uguale, si ingrandisce solo lo spazio utilizzato)
 

CyclopDroid

Well-Known Member
Licensed User
Longtime User
:(
 

LucaMs

Expert
Licensed User
Longtime User
BitmapDrawable non è una normale BitMap, per questo non l'accetta. Devi usare una BitMap.

L'evento Click, dove lo hai scritto? Va messo nel modulo di servizio, non nell'activity.

Se mi dessi retta, ciapa l'esempio di Erel e modifica quello.

E non mettere faccine tristi che mi rattristi :)

(oh, io di Widget ne so un tubo, eh... al massimo posso leggere il thread)
 

CyclopDroid

Well-Known Member
Licensed User
Longtime User
C'è nessunoooo?!? :D
Ho messo un button e, quando ci clicco sopra, questi fa l'effetto click ma NON entra nella Sub Button1_Click

Eppure ho visto il listato di Erel e, anche lui utilizza un Click (anche se poi usa troppe cose mentre io ho solo bisogno di un interruttore :().
Aiutino? :p
 

LucaMs

Expert
Licensed User
Longtime User
Creazione di un widget - guida passo passo

- Aggiungi un modulo di servizio. Nota che il modulo di servizio che gestisce la widget è un servizio standard.
- Progetta il layout del widget con il Designer. Prima aggiungi un Panel e quindi aggiungi le altre View in questo Panel.
Il layout del widget verrà creato da questo pannello.
- Aggiungi codice simile al seguente nel modulo di servizio:

link

- Compila e lancia l'applicazione. Vai alla schermata iniziale, premi a lungo sullo schermo e vedrai il tuo widget elencato nella lista widget.

ConfigureHomeWidget è una parola chiave speciale. In fase di esecuzione essa crea l'oggetto RemoteViews dal layout e imposta gli eventi. In fase di compilazione il compilatore genera i file necessari in base agli argomenti di questa parola chiave.

I quattro parametri sono: nome del file di layout, nome dell'evento, intervallo di aggiornamento e nome del widget.
Il nome evento è quello che sarà utilizzato per gli eventi RequestUpdate e Disabled.

Il widget può essere configurato per aggiornarsi automaticamente. L'intervallo, misurato in minuti, definisce quanto spesso il widget si auto-aggiornerà. Impostarlo a 0 per disabilitare gli aggiornamenti automatici. Aggiornare il Widget troppo spesso avrà un impatto negativo sulla batteria. Il valore minimo è di 30 minuti.

Nome Widget - il nome che apparirà nell'elenco widget.

Poiché questi argomenti vengono letti dal compilatore, sono accettati solo stringhe o numeri.

Eventi:
B4X:
Sub Service_Start (StartingIntent As Intent)
    If rv.HandleWidgetEvents(StartingIntent) Then Return
End Sub

Il codice precedente esamina l'Intent che ha generato l'esecuzione del servizio e "scatena" gli eventi legati al widget. Restituisce True se un evento è stato generato.

Il widget genera due eventi:
RequestUpdate viene generato quando il widget ha bisogno di aggiornarsi. Esso scatterà dopo aver aggiunto il widget alla Home, dopo che il dispositivo è stato avviato, in base all'intervallo di aggiornamento programmato (se impostato) o dopo l'applicazione è stata aggiornata;

L'evento Disabled viene generato quando l'ultima istanza del nostro widget viene rimossa dallo schermo.

Come accennato in precedenza, tutte le view [valide] supportano l'evento Click. Tutto ciò che deve essere fatto al fine di gestire l'evento click di un pulsante denominato Button1 è quello di aggiungere una sub di nome Button1_Click (il nome della sub dovrebbe effettivamente corrispondere alla proprietà EventName che di default è lo stesso nome).
Ad esempio, se desideri visualizzare l'Attività principale quando l'utente preme su Button1 puoi usare questo codice:
B4X:
Sub Button1_Click
StartActivity(Main)
End Sub

Il resto lo traduco più tardi ;)
 
Last edited:

CyclopDroid

Well-Known Member
Licensed User
Longtime User
Gasp! hai scritto un libro! :D
Ma sono tutte cose che ho fatto! :(
Scusa LucaMS ma, il precedente, l'ho postato dopo che hai inserito il tuo e avremmo scritto in concomitanza ;)
Le faccine tristi non sono come pensi... p solo un modo per dire "Sono frustrato" e non vi è faccina che possa raffigurarlo :D
Comunque, ho usato le Bitmap e l'evento Click, lo avevo inserito nel Service Module ma:
1) Non fa nulla di ciò che gli dico;
2) Se metto un Break Point e vado in Debug, non si ferma. :confused:

Insomma, non mi intercetta il Click!

Come detto in precedenza, ho messo anche un Button1 e, se ci clicco, questo reagisce, ma non entra nella sua Sub e non fa una cippa! :D:eek:

Purtroppo io ho la 3.8 di B4A, altrimenti ti invierei il codice completo (capirai , per quello che è :D)... potresti postare un piccolo codice Widget che acceda e spanga un semaforo, per capire dove sbaglio?
Sempre se puoi! ;)

PS: Voglio capire questi Widget e l'App è una cosa semplicissima (per chi lo sa fare) e, comunque, se riesco, è sempre Aggratise (visto che da solo non iresco a fare un Tubo, non pretendo ricompense altrui) :D

PS: Buahahaha! c'ho aperte una trentina di finestre in quasi tutte le lingue, per capire come fungono sti Widget :D:D:D Mi sempro Arsenio Lupin di B4A... taglio e copio di quà e di là (logicamente, poi, imparo il funzionamento e facio da solo ;)). :D:D
 
Last edited:

CyclopDroid

Well-Known Member
Licensed User
Longtime User
:eek::eek::eek: Pranzato?!?!?!
Gasp! Sono le 17:00... dire che sei impegnato è poco, oppure vuoi battere qualche record dei guinnes? :D
 

CyclopDroid

Well-Known Member
Licensed User
Longtime User
MITICOOOOOOO!!!!!! ;);););)
Ecco dove sbagliavo! Io caricavo una Bitmao con:
B4X:
premi.Initialize(File.DirAssets, "On.png")
Mentre dovevo caricarla nella RemoteView!!!!!

Ma dove sono le tue App? Perché non le linki, vista la tua bravura? :confused:

Buon Appetitoooo!!!!! (io fra un po, vado a preparare la Cena.... per fortuna che, in cucina, non ho bisogno di nessun aiuto... anzi ;))
 

LucaMs

Expert
Licensed User
Longtime User
ma quale bravura! Ho tentanto di farne uno e non riusciva. Poi ho modificato l'esempio di Erel, praticamente ho solo cambiato le immagini e tolto una label e una progressbar... infatti, ancora non ho pubblicato la mia unica app (nel 2048 lo farò, giuro :D)
 

CyclopDroid

Well-Known Member
Licensed User
Longtime User
Ora sei tu, quello troppo non sicuro di te :p
Sei riuscito in una cosa che io ci ho messo una giornata a capire, e dici di non essere bravo? :eek::mad:
Sicuramente, di App, ne avrai fatte a valanga ma sei troppo modesto. ;)
Comunque, ora funziona perfettamente (ancora non ho visto l'altra modifica) e, prima di postarla su google Play, vorrei dirti qualcoa in privato per un consiglio... come posso fare?
Ciao e Grazie.
 
Last edited:
Top