Autore Topic: Utilizzo RemoteViews nelle AppWidget  (Letto 981 volte)

Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Utilizzo RemoteViews nelle AppWidget
« il: 17 Novembre 2010, 10:05:06 CET »
0
Ho un paio di dubbi (direi tantissimi) su come si utilizzano le RemoteViews nelle AppWidget.

Negli (orribili) esempi della documentazione ( App Widgets | Android Developers ) trovo questo codice:
Codice (Java): [Seleziona]
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        final int N = appWidgetIds.length;

        // Perform this loop procedure for each App Widget that belongs to this provider
        for (int i=0; i<N; i++) {
            int appWidgetId = appWidgetIds[i];

            // Create an Intent to launch ExampleActivity
            Intent intent = new Intent(context, ExampleActivity.class);
            PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);

            // Get the layout for the App Widget and attach an on-click listener to the button
            RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.appwidget_provider_layout);
            views.setOnClickPendingIntent(R.id.button, pendingIntent);

            // Tell the AppWidgetManager to perform an update on the current App Widget
            appWidgetManager.updateAppWidget(appWidgetId, views);
        }
    }

Detto in modo spartano, questo codice dice questo: per tutti i widget che hai installato crea una nuova RemoteViews ed aggiorna il widget appWidgetId richiamando la funzione appWidgetManager.updateAppWidget().

Questo mi fa pensare che per aggiornare il layout di un Widget bisogna sostituire il vecchio layout con il nuovo. Richiamare infatti il new RemoteViews(), non dice altro che ricrea tutto di nuovo.

Qui la prima domanda: non è possibile aggiornare solo una parte del widget? Ho ad esempio un layout con due TextView, e voglio aggiornare solo il primo. E' possibile farlo?

Rispondendomi con quello che vedo, è un si. Molti widget aggiornano solo una parte (ad esempio quelli dove clicchi sul widget per aggiornalo e ti compare "Aggiornamento in corso..." in basso per poi diventare una data). Ma come fanno a farlo?

Grazie!

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:Utilizzo RemoteViews nelle AppWidget
« Risposta #1 il: 17 Novembre 2010, 12:35:38 CET »
0
new RemoteViews non ricrea la view, ma prende un riferimento al layout della view.
La view non viene ricreata.
Se come remoteView prendi un EditText o un'immagine, puoi aggiornarne il suo contenuto come faresti con una normale view.
Attenzione perché non tutti i metodi che hai a disposizione di una view li hai per una remoteView, ma in linea di massima puoi lavorarci.
IO faccio così per il mio widget meteo.
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/

Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:Utilizzo RemoteViews nelle AppWidget
« Risposta #2 il: 17 Novembre 2010, 15:21:14 CET »
0
new RemoteViews non ricrea la view, ma prende un riferimento al layout della view.
La view non viene ricreata.
Se come remoteView prendi un EditText o un'immagine, puoi aggiornarne il suo contenuto come faresti con una normale view.
Attenzione perché non tutti i metodi che hai a disposizione di una view li hai per una remoteView, ma in linea di massima puoi lavorarci.
IO faccio così per il mio widget meteo.

Mmm... il new mi ha tratto in inganno... ed anche il fatto che nel costruttore non passo nulla circa il widget attualmente in uso!
In ogni caso non trovo il modo di "prendere" i dati esistenti! Il banalissimo findViewById di View non esiste! Da quello che ho capito posso aggiornare ma non posso recuperare... giusto?

Offline 7h38ugg3r

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1200
  • Respect: +133
    • riccardofischetti
    • th38ugg3r
    • @7h38ugg3r
    • Mostra profilo
  • Dispositivo Android:
    Galaxy-S GT I-9000/ ASUS Eee Pad Transformer
  • Play Store ID:
    Riccardo Fischetti
  • Sistema operativo:
    OS X Lion / Linux Mint 11 (Katya)
Re:Utilizzo RemoteViews nelle AppWidget
« Risposta #3 il: 17 Novembre 2010, 16:43:36 CET »
0
A quanto pare non si può.
Sicuramente si può aggirare in qualche modo, perché ho visto qualche widget nel quale inserisci un testo per poterci fare qualcosa.....
Purtroppo non ho mai affrontato il problema, per cui non posso aiutarti, ma comunque la cosa mi incuriosisce e voglio trovare una soluzione.
7h38ugg3r<=>thebugger
Non conosci Java? Allora sei nel posto sbagliato!

http://www.androidpatterns.com/