2010-09-18 10 views
1

J'ai un Widget sur lequel je travaille, qui permet à l'utilisateur d'avoir plus d'une instance du widget sur son écran. Chaque ID de widget maintient son propre fichier de configuration. Cependant, pour une raison étrange, mon code qui est responsable de la configuration des boutons individuellement pour chaque identifiant de widget ne fonctionne pas, seul le premier identifiant de widget est lié à chaque widget individuel. ci-dessous est le code qui est responsable. Quelqu'un peut-il voir où est le problème?Comment lier des intentions spécifiques en attente à des boutons spécifiques sur des widgets spécifiques sur un appwidget multi-widget?

private void TieClicks(Context context){ 
    RemoteViews rViews; 
    PendingIntent editPendingIntent= null; 

// Intent updateintent = new Intent(context,SyncNoteWidget.class); 
// updateintent.setAction(SyncNote_Action_Widget_Update); 
// PendingIntent pendingupdateintent = PendingIntent.getBroadcast(context, 0, updateintent, 0); 
// rViews.setOnClickPendingIntent(R.id.widgettextview , pendingupdateintent); 
// 
    AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); 
    int[] ids = appWidgetManager.getAppWidgetIds(new ComponentName(context, SyncNoteWidget.class)); 
    for (int i =0;i< ids.length;i=i+1){ 
    int wId = ids[i]; 
    rViews = new RemoteViews(context.getPackageName(),R.layout.widget); 

    editPendingIntent = makeControlPendingIntentActivity(context, wId); 
    Log.v("syncnote", "tieing " + String.valueOf(wId)); 
    rViews.setOnClickPendingIntent(R.id.widgeteditbutton , editPendingIntent); 
    appWidgetManager.updateAppWidget(wId, rViews); 

    editPendingIntent= null; 

    } 
} 
private PendingIntent makeControlPendingIntentActivity(Context context,int appWidgetId) { 

    Intent active = new Intent(context, EditNote.class); 
    active.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    active.setAction(com.ntu.way2fungames.syncnote.SyncNoteWidget.SyncNote_Action_Edit); 
    active.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); 
    return(PendingIntent.getActivity(context, 0, active, 0)); 
    } 

Répondre

1

Le problème était que, pour une raison quelconque, "PendingIntent.getActivity" réutilisait le premier PendingIntent. Dieu sait pourquoi. Le correctif est ci-dessous, il suffit d'ajouter des données aléatoires à l'appel.

private PendingIntent makeControlPendingIntentActivity(Context context,int appWidgetId) { 
     Intent active = null; 
     active = new Intent(context, EditNote.class); 
     active.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     active.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK); 
     active.setAction(com.ntu.way2fungames.syncnote.SyncNoteWidget.SyncNote_Action_Edit); 
     active.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); 
     PendingIntent pi =PendingIntent.getActivity(context,(int)(Math.random()*10000), active, 0); 
     Log.v("syncnote", "PI: "+pi.toString()); 
     return(pi); 
    } 
0

Il serait utile si vous avez inclus les entrées du journal que vous créez avec:

Log.v("syncnote", "tieing " + String.valueOf(wId)); 

Cela pourrait répondre à la question importante: Combien de valeurs sont: int [] ids?

Qu'est-ce qui est dans R.layout.widget?

Une image de vos widgets aiderait aussi. Une image vaut mille mots ...

+0

La sortie du journal est comme prévu, si j'ai 2 widgets sur mes écrans d'accueil, alors il sera quelque chose de sortie le long des lignes de encordement 112 encordement 113 et il y a toujours autant de valeurs dans ids que leur sont des widgets. R.layout.widget est une disposition linéaire simple avec une vue de texte et un contrôle de bouton. souvenez-vous de ses multiples copies du même appwidget. Merci d'avoir essayé de m'aider =) – nathan

Questions connexes