Autore Topic: Widget con ListView: aggiornarlo manualmente da activity  (Letto 1107 volte)

Offline zorcraft

  • Utente junior
  • **
  • Post: 108
  • Respect: +5
    • Mostra profilo
  • Dispositivo Android:
    note
  • Play Store ID:
    zorcraft
Widget con ListView: aggiornarlo manualmente da activity
« il: 13 Agosto 2015, 11:26:11 CEST »
0
Ciao a tutti , sto impazzendo da un po su un Widget , funziona tutto con il limite del aggiornamento ogni 30 minuti, da cosa ho capito imposto da android per un risparmio energetico.
Il punto che a me interesserebbe aggiornare il widget manualmente, più precisamente quando vado ad aggiornare il mio database con nuovi campi.
Ho già creato una funzione che mi aggiorna la ListView nel activity  e come ultimo comando vorrei aggiornare anche la ListView nel widget ma questo non mi riesce.

Qualcuno sa suggerirmi del codice inseribile nel activity che aggiorni il mio Widget?

Offline iClaude

  • Utente normale
  • ***
  • Post: 204
  • Respect: +13
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S5
  • Sistema operativo:
    Windows 10
Re:Widget con ListView: aggiornarlo manualmente da activity
« Risposta #1 il: 13 Agosto 2015, 11:59:56 CEST »
0
Devi creare un Intent, inviare un Broadcast con tale Intent. L'Intent quindi lo ricevi nel metodo onReceive del widget, da cui poi chiami onUpdate del widget dopo aver ricavato gli id(s) dei widget.

Offline zorcraft

  • Utente junior
  • **
  • Post: 108
  • Respect: +5
    • Mostra profilo
  • Dispositivo Android:
    note
  • Play Store ID:
    zorcraft
Re:Widget con ListView: aggiornarlo manualmente da activity
« Risposta #2 il: 13 Agosto 2015, 12:03:47 CEST »
0
Io ho creato questo :
Codice (Java): [Seleziona]
Intent intent = new Intent();
intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
Context context = getApplicationContext();
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
ComponentName thisWidget = new ComponentName(context, WidgetProvider.class);
int[] appWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget);
 new WidgetProvider().onReceive(context, appWidgetManager, intent, appWidgetIds);

da Broadcast  dovrebbe lavorare il WidgetProvider che estende AppWidgetProvider
ma sembra che non faccia nulla, sicuro sbaglio qualcosa

Offline iClaude

  • Utente normale
  • ***
  • Post: 204
  • Respect: +13
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S5
  • Sistema operativo:
    Windows 10
Re:Widget con ListView: aggiornarlo manualmente da activity
« Risposta #3 il: 13 Agosto 2015, 12:10:47 CEST »
0
Ti consiglio di inviare un Broadcast con sendBroadcast in modo che il metodo onReceive, come dice il nome stesso, riceva il Broadcast, anziché invocare direttamente onReceive all'esterno della classe che gestisce il widget.
In onReceive tramite un AppWidgetManager ricavi gli id dei widget e quindi chiami onUpdate passando i parametri relativi.

Offline zorcraft

  • Utente junior
  • **
  • Post: 108
  • Respect: +5
    • Mostra profilo
  • Dispositivo Android:
    note
  • Play Store ID:
    zorcraft
Re:Widget con ListView: aggiornarlo manualmente da activity
« Risposta #4 il: 13 Agosto 2015, 14:26:13 CEST »
0
Fatto un passo avanti
cosi riesco a chiamare onReceive :

Codice (Java): [Seleziona]
Intent broadcast = new Intent(this, WidgetProvider.class);
 broadcast.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
 sendBroadcast(broadcast);

da li eseguo questo :

Codice (Java): [Seleziona]
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
ComponentName thisWidget = new ComponentName(context, WidgetProvider.class);
int[] appWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget);
String action = intent.getAction();
Log.v("bobo", "onReceive: "+action);
if (action != null){             
        onUpdate(context, appWidgetManager, appWidgetIds);
}else{
       super.onReceive(context, intent);
}

mi richiama onUpdate ma non aggiorna il windget


Offline iClaude

  • Utente normale
  • ***
  • Post: 204
  • Respect: +13
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S5
  • Sistema operativo:
    Windows 10
Re:Widget con ListView: aggiornarlo manualmente da activity
« Risposta #5 il: 13 Agosto 2015, 14:34:26 CEST »
0
Quindi confermi che viene eseguito onReceive e anche onUpdate?
Quindi il problema è in onUpdate. Ad esempio se usi delle variabili che contengono i dati da visualizzare, in onUpdate devi ricavare il nuovo valore aggiornato prima di visualizzarle sul widget.
Se onUpdate funziona nei casi normali immagino non sia un problema dei metodi utilizzati per visualizzare i dati tramite RemoteViews.
Quindi controlla che il valore delle variabili venga aggiornato prima di visualizzarle,  come detto sopra.