2017-10-08 16 views
0

Dans mon application, je garde la trace d'un compteur, qui peut être incrémenté en cliquant sur un bouton de widget.Mise à jour du TextView d'un widget d'écran d'accueil en cliquant sur le bouton

Je voulais donner à l'utilisateur un retour sur le fait que son clic en a ajouté un au compteur - j'ai donc essayé d'ajouter un textView au-dessus du bouton du widget. Est-il possible de mettre à jour le numéro présenté après avoir cliqué?

Mon code (montre actuellement une valeur obsolète du compteur ...):

for (int appWidgetId : appWidgetIds) { 

    Intent incCounter = new Intent(context, WidgetBroadcastReceiver.class); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, incCounter, 0); //braodcasting to a counter changing module 

    RemoteViews ButtonCounterView = new RemoteViews(context.getPackageName(), R.layout.home_screen_widget); 
    ButtonCounterView.setOnClickPendingIntent(R.id.widgetCounterButton, pendingIntent); 

    String updatedCounter = String.valueOf(countersMap.getInt(todaysDate.getDate(), 0)); 
    ButtonCounterView.setTextViewText(R.id.widgetCounter, updatedCounter); 

    appWidgetManager.updateAppWidget(appWidgetId, ButtonCounterView); 
} 
+0

mise à jour le contenu de TextView puis mettre à jour un widget – nomag

+0

Que voulez-vous dire par là? où dans mon code dois-je ajouter le setTextViewText, et où setOnClickPendingIntent? @nomag –

Répondre

-1

Oui, il y a.

Ajouter et onClickStatement à votre bouton lorsque l'utilisateur clique (dans le dossier xml):

<Button android:id="@+id/mybutton" 
    android:text="Click me!" 
    android:onClick="myMethod" /> 

ensuite sur votre classe réelle, il suffit de créer les éléments suivants:

Button btn = (Button) findViewById(R.id.mybutton); 

btn.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     myMethod(); 
    } 
}); 

Ensuite, myMethod () fera essentiellement quelque chose comme:

textView.setText("Enter text that says user has added one to the counter") 
+0

Merci! Êtes-vous sûr que cela est pertinent pour les widgets d'écran d'accueil? Parce que la classe de widget ne me permettra pas d'utiliser findViewById. Aussi je pense que vous ne pouvez utiliser que setOnClickPendingIntent et non OnClickListener sur le widget, mais pas sûr ... Je vais le vérifier de toute façon –

+0

ce n'est pas pertinent pour notifcation du tout. – nomag

+0

J'ai essayé d'aider, on dirait que je me suis trompé. Je suis désolé pour ce copain – rpikado

0

Vous devez mettre à jour le contenu de RemoteView à l'intérieur WidgetBroadcastReceiver puis rafraîchir le widget comme ci-dessous:

AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(getApplicationContext()); 
ComponentName thisWidget = new ComponentName(getApplication(), YourWidget.class); 
int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget); 
for (int widgetId : allWidgetIds) { 
    appWidgetManager.updateAppWidget(widgetId, remoteViews); 
}