2010-08-17 4 views
1

Je tente de créer un widget incroyablement simple qui change le texte affiché toutes les 5 s ou plus. Cependant j'ai eu des maux de tête importants essayant de faire fonctionner ceci. Évidemment, je ne peux pas utiliser l'appel onUpdate car c'est au minimum toutes les 30 minutes. Actuellement, ma solution utilise un minuteur dans une classe de service étendue, qui est aussi laide que l'enfer et a tendance à courir comme un chien après un certain temps. Existe-t-il une façon "propre" de faire cela, c'est-à-dire. d'une manière qui ne nécessite pas un Widget, UpdateService, Timers etc.Widget Android avec changement de texte

Je ne demande pas une solution complète, juste un pointeur sur la façon de le faire de manière efficace.

Merci, John

Répondre

1

Utilisez un CountdownTimer:

new CountdownTimer(5000, 1000) { 

    public void onTick(long millisUntilFinished) { 
     mTextField.setText("seconds remaining: " + millisUntilFinished/1000); 
    } 

    public void onFinish() { 
     mTextField.setText("done!"); 
    } 
    }.start(); 
0

Qu'est-ce que je l'ai fait est ajouté le processus ci-dessous qui est appelé dans votre fournisseur de Widget .... comme si ...

de sorte que le widget sera mis à jour pour les prochaines 24 heures toutes les 30secs ....

J'ai aussi dans mon code de l'application principale J'ai quelques prefs que je up date, puis-je utiliser l'événement fournisseur pour appeler le temporisateur qui tire l'information mise à jour pref .... sans service :)

@Override 
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, 
     int[] appWidgetIds) { 

     try { 
      final int N = appWidgetIds.length; 
      for (int i=0; i<N; i++) { 
       int appWidgetId = appWidgetIds[i]; 
       updateAppWidget(context, appWidgetManager, appWidgetId); 


      } 

     updateWidgetView(context, context.getSharedPreferences(
        MainActivity.APP_PREFERENCES, 
         Context.MODE_PRIVATE)); 
     } catch (Exception e) { 
       e.printStackTrace(); 
     } 





    } 




public static void updateAppWidget(final Context context, final AppWidgetManager appWidgetManager, 
       final int appWidgetId){ 

     Context c; 
     c = context; 
      try { 

       new CountDownTimer(86400, 30000) { 

        public void onTick(long millisUntilFinished) { 
        //do proc every 30sec here. pull prefs and show them        
         SharedPreferences preferencesaa = PreferenceManager.getDefaultSharedPreferences(context); 

          String drinkmsg = preferencesaa.getString("WIDGETTEXT", "You need to drink water."); 

         RemoteViews updateViews = new RemoteViews(context.getPackageName(), R.layout.widget); 
         updateViews.setTextViewText(R.id.widget_text_threat, drinkmsg.toString()); 

         appWidgetManager.updateAppWidget(appWidgetId, updateViews); 
        } 

        public void onFinish() { 

        } 
        }.start(); 



      } catch (Exception e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 

      } 

First App that I am about to release. 8 Cups a Day™