Je commence à me mouiller les pieds en ce qui concerne la programmation Android, donc je suis désolé si c'est très simple.Transmettre les données du widget de l'application à l'activité en fonction du texte cliqué
Mon widget d'application est constitué de plusieurs textviews ajoutés dynamiquement, chacun lancant la même activité avec un index variable basé sur celui sur lequel on a cliqué. Obtenir l'index correct est ce que j'ai des problèmes avec actuellement.
Voici le code que j'utilise pour créer le widget:
public static String ListItemIndex = "com.georgeduckett.helloworld.ScrollWidgetProvider.ListItemIndex";
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
final int N = appWidgetIds.length;
// Perform this loop procedure for each App Widget that belongs to this provider
for (int i=0; i<N; i++) {
int appWidgetId = appWidgetIds[i];
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.scroll_widget_layout);
// Create several views that will contain the content
for (int newviewindex = 1; newviewindex<5; newviewindex++) {
// Create an Intent to launch WidgetActivity for when we're clicked on
Intent intent = new Intent(context, WidgetActivity.class);
Bundle bundle = new Bundle();
bundle.putInt(com.georgeduckett.helloworld.ScrollWidgetProvider.ListItemIndex, newviewindex);
intent.putExtras(bundle);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
RemoteViews SubItemView = new RemoteViews(context.getPackageName(), R.layout.scroll_widget_item_layout);
SubItemView.setTextViewText(R.id.textbox1, "testing " + newviewindex);
SubItemView.setOnClickPendingIntent(R.id.textbox1, pendingIntent);
views.addView(R.id.items_container, SubItemView);
}
// Tell the AppWidgetManager to perform an update on the current App Widget
appWidgetManager.updateAppWidget(appWidgetId, views);
}
}
Et voici le code d'activité:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle bundle = getIntent().getExtras();
if(bundle != null) {
int Index = bundle.getInt(com.georgeduckett.helloworld.ScrollWidgetProvider.ListItemIndex);
Toast.makeText(this, Integer.toString(Index), Toast.LENGTH_LONG).show();
}
else
{
Toast.makeText(this, "Boo!", Toast.LENGTH_LONG).show();
}
setContentView(R.layout.main);
}
Actuellement ce qui se passe est peu importe qui je clique sur i toujours obtenir Popup '1', ce qui implique que je suis toujours en cliquant sur le premier, ou cela implique que les données erronées sont transmises.
J'ai regardé partout pour celui-ci, mais je ne trouve aucune information autre qu'un tutoriel de type générique 'comment transmettre des données'.
Merci pour une réponse rapide. J'ai essayé d'utiliser le PendingIntent.FLAG_CANCEL_CURRENT comme vous l'avez suggéré (et aussi PendingIntent.FLAG_ONE_SHOT), cependant, maintenant, ce qui se passe, c'est que mon action n'est appelée que la première fois, une fois que je la rejette (cliquez sur le bouton précédent) le widget rien ne semble arriver. –
J'ai aussi remarqué que seul le dernier textview démarre l'action, les autres semblent ne rien faire. –
On dirait qu'il y a plus d'endroits dans Android, où "le dernier gagne". Si vous faites par exempledans onClick() {startActivity (X); startActivity (Y); } Seulement Y sera appelé (iirc) –