Autore Topic: widget switcher - passa da spento a acceso e ci resta....  (Letto 540 volte)

Offline imugno

  • Nuovo arrivato
  • *
  • Post: 24
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    LG Nexus 4
  • Sistema operativo:
    Windows 7
widget switcher - passa da spento a acceso e ci resta....
« il: 09 Luglio 2013, 19:46:17 CEST »
0
Buonasalve a tutti,
sto provando a realizzare un semplice widget che permette di accendere e spengere la luminosità automatica, ma per ora sono solo a sistemare la parte grafica.....
Voglio che quando ci si clicki sopra cambi icona, e all'inizio pensavo di fare specificando il metodo "wid_cliccato" direttamente nel layout del widget, ma non vuole funzionare.... Ho cercato in rete e l'unica cosa che ho trovato è stata uno che chiedeva la stessa identica cosa, e l'altro che rispondeva "quello va bene solo per le API 4+"..... pace all'anima di chi ha ancora la versione 1.6!! Come minimo adesso si programma API8, no??

Quindi ho provato questo metodo che fan tutti:
Codice (Java): [Seleziona]
public class wid_class extends AppWidgetProvider {
       
        private static String WIDGET_BUTTON = "widget_premuto";
        private static RemoteViews views;
        boolean autom = false;
       
        /* il mio primo tentativo, miseramente fallito
        public void wid_cliccato(View view){
                ImageView img = (ImageView) view.findViewById(R.id.img);
                if(!auto) img.setImageResource(R.drawable.ic_auto);
                else img.setImageResource(R.drawable.ic_man);
                auto=!auto;
        }*/

       
        @Override
        public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds){
                super.onUpdate(context, appWidgetManager, appWidgetIds); // serve davvero a qualcosa? non è un metodo vuoto?
               
                Intent intent = new Intent(context, wid_class.class);
                intent.setAction(WIDGET_BUTTON);
                PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
                if(views==null) views = new RemoteViews(context.getPackageName(), R.layout.wid_layout);
                views.setOnClickPendingIntent(R.id.img, pendingIntent);
               
                appWidgetManager.updateAppWidget(appWidgetIds, views);
        }
       
        @Override
        public void onReceive(Context context, Intent intent){
                if((intent.getAction().equals(WIDGET_BUTTON))){
                        AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
                        int[] appWidgetIds = appWidgetManager.getAppWidgetIds(new ComponentName(context,wid_class.class));

                        if(autom) views.setImageViewResource(R.id.img,R.drawable.ic_man);
                        else views.setImageViewResource(R.id.img,R.drawable.ic_auto);
                        autom = !autom;

                        appWidgetManager.updateAppWidget(appWidgetIds, views);
                }
                else super.onReceive(context, intent); //anche questo forse inutile, l'ho visto scritto da altre parti
        }
}

Avviando il widget, mi ritrovo inizialmente con l'icona della luminosità manuale, premendoci sopra diventa automatica, e sistemando un po' di comandi per il debug vedo che  il flag "autom" passa da falso a vero. Solo che a questo punto resta sempre vero!! Da automatico non torna più manuale!!
Non capisco dove è sbagliato, so che è una cosa demenziale, ma ho bisogno di aiuto!  ;-)

EDIT: stupido me, è bastato mettere static la variabile autom:
Codice (Java): [Seleziona]
static boolean autom = false;perché sennò si resettava ogni volta
« Ultima modifica: 09 Luglio 2013, 23:26:31 CEST da imugno »