J'ai un widget que vous appuyez et il alors il mettra à jour le texte sur le widget. J'ai mis un écouteur sur le clic pour lancer une autre activité pour effectuer la mise à jour de texte, mais pour une raison quelconque cela ne fonctionne que temporairement et alors il ne répondra pas et ne fera rien quand on le presse. Est-ce que quelqu'un sait pourquoi cela pourrait être fait? J'ai posté mon code de widget ci-dessous au cas où il serait utile.widget android ne répond pas
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,int[] appWidgetIds) {
thisWidget = new ComponentName(context, MemWidget.class);
Intent intent = new Intent(context, updatewidget.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
// Get the layout for the App Widget and attach an on-click listener to the button
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget);
views.setOnClickPendingIntent(R.id.ImageButton01, pendingIntent);
// Tell the AppWidgetManager to perform an update on the current App Widget
appWidgetManager.updateAppWidget(thisWidget, views);
}
@Override
public void onReceive(Context context, Intent intent)
{
appWidgetManager = AppWidgetManager.getInstance(context);
remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget);
thisWidget = new ComponentName(context, MemWidget.class);
// v1.5 fix that doesn't call onDelete Action
final String action = intent.getAction();
if (AppWidgetManager.ACTION_APPWIDGET_DELETED.equals(action)) {
final int appWidgetId = intent.getExtras().getInt(
AppWidgetManager.EXTRA_APPWIDGET_ID,
AppWidgetManager.INVALID_APPWIDGET_ID);
if (appWidgetId != AppWidgetManager.INVALID_APPWIDGET_ID) {
this.onDeleted(context, new int[] { appWidgetId });
}
}
else
{
super.onReceive(context, intent);
}
}
Voici le code qui est appelé de mon activité
thisWidget = new ComponentName(this, MemWidget.class);
appWidgetManager = AppWidgetManager.getInstance(this);
remoteViews = new RemoteViews(this.getPackageName(), R.layout.widget);
//do work
remoteViews.setTextViewText(R.id.ImageButton01,"setting text here");
appWidgetManager.updateAppWidget(thisWidget, remoteViews);
merci pour la réponse. J'ai ajouté le code qui appelle updateappwidget après l'interaction de l'utilisateur de l'activité lancée. Je vais changer le widget pour utiliser un broadcastreceiver au lieu de lancer une activité, ce qui n'est pas nécessaire. Lors de la recherche d'une solution, j'ai trouvé la réponse suivante: "Assurez-vous que tous les éléments PendingIntents sont envoyés avec chaque mise à jour RemoteViews, même s'ils ont déjà été réglés. RemoteViews mis en cache est appliqué dessus. " mais comment faire? – John
Merci, ça a marché! – John