2012-11-02 8 views
9

metodo Quindi onUpdate chiamaAndroid Widget schermata Home: RemoteViews setRemoteAdapter (...) metodo non lavorare su API 11+

remoteViews.setRemoteAdapter(id, R.id.listview, intent)

al fine di applicare un adattatore per la listview nel widget.

C'è un pulsante nell'intestazione del widget che può modificare quale set di dati viene visualizzato dal listview (pensa in arrivo, outbox, asterisco, ecc per un ipotetico widget email). Quando faccio clic su quel pulsante, esso porta l'utente a un'attività che consente loro di scegliere quale set di dati visualizzare. Quando la selezione è fatta, il seguente codice viene eseguito:

Intent intent = new Intent(this, WidgetReceiver.class); 
intent.setAction("android.appwidget.action.APPWIDGET_UPDATE"); 
intent.putExtra("notify", true); 
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, new int[] {R.xml.widget_provider}); 
sendBroadcast(intent); 

Ciò richiede con successo il metodo onUpdate nella classe AppWidgetProvider del widget. Tuttavia, se dovessi alternare diversi tipi di set di dati, dopo 2-3 modifiche alle preferenze, il metodo setRemoteAdapter smette semplicemente di funzionare. Ho registrato estesamente il processo e il metodo, che dovrebbe chiamare un servizio che a sua volta carica la classe RemoteViewsService.RemoteViewsFactory per popolare il widget e il suo adattatore, non esegue alcuna di queste operazioni. Il primo paio di volte che cambi la preferenza, funziona come previsto. Ma poi si chiude.

Qualcuno ha idea di cosa sta succedendo qui?

risposta

10

Strano, ma ha trovato una soluzione. Sembra che Android stia memorizzando nella cache gli intenti che usi nel tuo metodo onUpdate. Se rispedisci quello che sembra essere lo stesso intento, non funzionerà come ti aspetteresti.

Soluzione: avere un numero intero iterato statico che si include come parametro negli extra di intento. Ha risolto il problema per me.

Intent intent = new Intent(context, WidgetService.class); 
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, currentWidgetId); 
intent.putExtra("random", randomNumber); 
randomNumber++; 
intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME))); 

Oh, Android ...

+0

HI JMRboosties. Saresti così gentile da condividere il tuo codice? Sto anche provando a mettere un ListView in un widget homescreen E aggiungere un'intestazione con alcuni pulsanti (che può cambiare il set di dati che viene visualizzato dalla listview). Sto sollevando difficoltà registrando i clic sui pulsanti dell'intestazione e aggiornando le visualizzazioni del listino. Txs – Hubert

+1

Questo sembra accadere per tutti gli aggiornamenti - alla fine Android si annoia e si presuppone che tu abbia i risultati corretti:/Grazie @JMRboosties :) – Graeme

+0

questo sembra non funzionare quando si aggiorna e la tua app viene sostituita da una versione più recente, qualsiasi suggerimento per risolverlo? – 2cupsOfTech

1

Ho affrontato questo problema qualche tempo fa. Anche questo approccio con numeri casuali mi ha aiutato.

Problemi correlati