Autore Topic: più oggetti cliccabili in un widget  (Letto 1187 volte)

Offline purer

  • Nuovo arrivato
  • *
  • Post: 9
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Wildfire
più oggetti cliccabili in un widget
« il: 30 Marzo 2011, 18:40:14 CEST »
0
Salve a tutti, ho un problema....

Ho creato un widget che visualizza due textview e ad ognuna dovrei assegnare un azione diversa al click della stessa.

Il problema è che quando clicco su una o sull'altra vengono eseguite entrambe le operazioni...
Quindi la mia domanda è: come faccio ad eseguire separatamente le due azioni?

Posto di seguito parte del codice del widget

Codice (Java): [Seleziona]
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.mainwidget);              
           
            Intent active = new Intent(context, Widget.class);
            active.setAction(ACTION_WIDGET_REFRESH);            
            PendingIntent actionPendingIntent = PendingIntent.getBroadcast(context, 0, active, 0);
            remoteViews.setTextColor(R.id.widget_textview, color[colore]);
            remoteViews.setOnClickPendingIntent(R.id.config, actionPendingIntent);

            active = new Intent(context, Widget.class);
            active.setAction(ACTION_WIDGET_SETTINGS);
            actionPendingIntent = PendingIntent.getBroadcast(context, 0, active, 0);
            remoteViews.setTextViewText(R.id.widget_textview, frase[x]);
            remoteViews.setOnClickPendingIntent(R.id.widget_textview, actionPendingIntent);          

            appWidgetManager.updateAppWidget(appWidgetIds, remoteViews);

C'è qualche buon anima disposta ad aiutarmi?  :-) :-)
« Ultima modifica: 01 Aprile 2011, 21:20:27 CEST da purer »

Offline teskio

  • Moderatore globale
  • Utente normale
  • *****
  • Post: 387
  • Respect: +118
    • Github
    • Google+
    • Mostra profilo
    • Skullab
  • Dispositivo Android:
    Cubot GT99 / SurfTab Ventos 10.1
  • Play Store ID:
    Skullab Software
  • Sistema operativo:
    windows 7 / ubuntu 12.04
Re:PIU' OGGETTI CLICCABILI IN UN WIDGET
« Risposta #1 il: 30 Marzo 2011, 20:36:54 CEST »
+1
Quali sono le operazioni che vorresti fare al click ?
Non saranno per caso :
Codice (Java): [Seleziona]
remoteViews.setTextColor(R.id.widget_textview, color[colore]);
....
remoteViews.setTextViewText(R.id.widget_textview, frase[x]);

Quello che fai con il setOnClickPendingIntent in teoria è corretto. Se non ho capito male dalla porzione di codice, al click richiami la stessa classe "Widget", che usi per il tuo AppWidget. Un AppWidget altro non è che un broadcastReceiver, in pratica, che Android chiama "Provider" (AppWidgetProvider).
Non fai altro che registrare nell'intent-filter del tuo appWidget le action che può ricevere. Il PendingIntent.getBroadcast è l'equivalente di Context.sendBroadcast, pertanto non fai altro che inviare in broadcast l'intent desiderato :
Codice (Java): [Seleziona]
Intent active = new Intent(ACTION_WIDGET_REFRESH);Ora però per gestire gli intent che verrano "ricevuti" dall tuo AppWidget devi fare l'override del metodo onReceive
Tutto chiaro ?  :-P

Offline purer

  • Nuovo arrivato
  • *
  • Post: 9
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Wildfire
Re:PIU' OGGETTI CLICCABILI IN UN WIDGET
« Risposta #2 il: 01 Aprile 2011, 20:29:57 CEST »
0
Più o meno...molto meno che più  :-)
Sono alle prime armi e quindi avrei bisogno di qualche aiutino...

comunque allora se ho capito bene devo fare l'onReceive con ad esempio

Codice (Java): [Seleziona]
if (intent.getAction().equals(ACTION_WIDGET_SETTINGS))
e qui dentro scrivere quello che deve fare quando c'è quell'azione?

grazie per l'aiuto :-)

Offline purer

  • Nuovo arrivato
  • *
  • Post: 9
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Wildfire
Re:PIU' OGGETTI CLICCABILI IN UN WIDGET
« Risposta #3 il: 01 Aprile 2011, 21:11:23 CEST »
0
Anzi, ti chiedo se gentilmente puoi aiutarmi a risolvere il mio problema di fondo...

Io al click su una textView del widget dovrei cambiare il testo all'interno della stessa textview, mentre al click su un'altra textview dovrei cambiare il colore del testo della textview di prima...magari la soluzione che ho cercato io non è la migliore...

riusciresti a darmi un consiglio??

grazie in anticipo

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:PIU' OGGETTI CLICCABILI IN UN WIDGET
« Risposta #4 il: 01 Aprile 2011, 21:15:55 CEST »
0
riusciresti a darmi un consiglio??

Potresti editare il primo post e scrivere il titolo del topic in minuscolo?

Grazie.

Offline purer

  • Nuovo arrivato
  • *
  • Post: 9
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Wildfire
Re:più oggetti cliccabili in un widget
« Risposta #5 il: 01 Aprile 2011, 21:20:52 CEST »
0
Chiedo sorry...

fatto :-)

Offline teskio

  • Moderatore globale
  • Utente normale
  • *****
  • Post: 387
  • Respect: +118
    • Github
    • Google+
    • Mostra profilo
    • Skullab
  • Dispositivo Android:
    Cubot GT99 / SurfTab Ventos 10.1
  • Play Store ID:
    Skullab Software
  • Sistema operativo:
    windows 7 / ubuntu 12.04
Re:più oggetti cliccabili in un widget
« Risposta #6 il: 02 Aprile 2011, 16:08:30 CEST »
0
Citazione da: purer
Codice (Java): [Seleziona]
if (intent.getAction().equals(ACTION_WIDGET_SETTINGS))e qui dentro scrivere quello che deve fare quando c'è quell'azione?

Esattamente. Un AppWidgetProvider si comporta come un BroadcastReceiver. Se hai implementato il tuo AppWidget, saprai anche come questo si comporta quando viene aggiunto alla home per la prima volta, quando ne viene aggiunta una nuova istanza e quando viene rimosso definitivamente dalla home. Generalmente non serve fare l'override dell'onReceive,perchè gli altri metodi nativi bastano per gestire (in un normale funzionamento) l'AppWidget creato.
Il metodo onReceive viene chiamato per primo dall'AppWidget quando riceve un Intent (questo perchè è un BroadcastReiver :-)), e gestisce in automatico le chiamate agli altri metodi, di cui generalmente si fa l'override. Ora, dato che nel tuo caso implementi anche il metodo onReceive, dovrai per forza di cosa gestire con quello anche gli altri metodi, ossia l'onUpdate,l'onDeleted,l'onEnabled e l'onDisabled. In teoria si potrebbero inviare messaggi di broadcast usando Context.sendBroadcast, come in qualsiasi altro BroadcastReceiver, tuttavia questo potrebbe generare delle "collisioni" degli Intent inviati, ad esempio l'AppWidget potrebbe non essere pronto ad eseguire un operazione associata alla ricezione di un determinato Intent, perchè impegnato nell'esecuzione di qualcos'altro. Per questo è meglio usare PendingIntent.getBroadcast.
Ora che puoi gestire i tuoi custom Intent, potrai gestire il tuo AppWidget, e cambiare le TextView al suo interno. Altro scoglio da affrontare con le AppWidget è che le views che lo compongono sono gestite dalla RemoteViews, che non offre grande flessibilità ma bisogna un po' studiarsela per capire cosa si può e non si può fare. Ricorda anche che un AppWidget è una applicazione che "gira" in un altra applicazione  :-P ovvero la Home del dispositivo, quindi le sue views devono essere "infilate" dentro le views della home. (un casino insomma... :D)
Se hai problemi con il codice posta cosa hai scritto ed eventuali logcat.