title: Multiple Android Widget instances only updating last widget
body: <p>I tried solving my problem using this <a href="https://stackoverflow.com/questions/4011178/multiple-instances-of-widget-only-updating-last-widget">link</a></p>
  
  <blockquote>
    <p>update - I figured out that there is something wrong with the setter of the pending intent-  every time I click on the imageview- the intent sends the extre details of the last defined widget- 
    meaning that the other pending intents that where defined on the pre-added widgets were run-over by the newer widgets</p>
  </blockquote>
  
  <p>I have an app widget that shows a picture chosen by the user.(many widgets- many pictures)
  my problem is: no matter which widget on screen I press - only the last added widget gets updated:
  here is my code</p>
  
  <p>My Widget xml provider Code</p>
  
  <pre><code>&lt;appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
      android:initialLayout="@layout/widget_Test"
      android:minHeight="146dip"
      android:minWidth="146dip"
      android:updatePeriodMillis="0" /&gt;
  </code></pre>
  
  <p>My Manifest xml code</p>
  
  <pre><code>&lt;?xml version="1.0" encoding="utf-8"?&gt;
  &lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.test"
      android:versionCode="1"
      android:versionName="1.0" &gt;
  
      &lt;uses-sdk android:minSdkVersion="8" /&gt;
  
      &lt;uses-permission android:name="android.permission.BIND_REMOTEVIEWS" &gt;
      &lt;/uses-permission&gt;
  
      &lt;application
              android:icon="@drawable/icon"
              android:label="@string/app_name" &gt;
              &lt;activity
                      android:name=".Activities.WidgetConfig"
                      android:screenOrientation="portrait" &gt;
  
                      &lt;!-- prbbly delete this line --&gt;
                      &lt;action android:name="android.appwidget.action.APPWIDGET_CONFIGURE" /&gt;
              &lt;/activity&gt;
              &lt;!-- Test Widget --&gt;
              &lt;receiver
                      android:name=".Simple.Widget"
                      android:label="@string/app_widget_Test" &gt;
                      &lt;intent-filter&gt;
                              &lt;action android:name="android.appwidget.action.APPWIDGET_UPDATE" /&gt;
                      &lt;/intent-filter&gt;
  
                      &lt;meta-data
                              android:name="android.appwidget.provider"
                              android:resource="@xml/widget_Test_provider" /&gt;
              &lt;/receiver&gt;
  
              &lt;service android:name=".Simple.Widget$TestWidgetService" /&gt;
      &lt;/application&gt;
  
  &lt;/manifest&gt;
  </code></pre>
  
  <p>Widget provider</p>
  
  <pre><code>public class Widget extends AppWidgetProvider
  {
      public static String PREFENCES_WIDGET_CONFIGURE = "ActionConfigureWidget";
      public  static int[] widgets;
  
      @Override
      public void onUpdate(Context context, AppWidgetManager appWidgetManager,
                      int[] appWidgetIds)
      {
              Intent svcIntent = new Intent(context, TESTWidgetService.class);
              widgets = appWidgetIds;
              context.startService(svcIntent);
      }
  
      public static class TESTWidgetService extends Service
      {
              @Override
              public void onStart(Intent intent, int startId)
              {
                      super.onStart(intent, startId);
                      // Update the widget
                      RemoteViews remoteView = buildRemoteView(this);
  
                      // Push update to homescreen
                      Mngr.getInstance().pushUpdate(remoteView,
                                      getApplicationContext(), Widget.class);
  
                      // No more updates so stop the service and free resources
                      stopSelf();
              }
  
              public RemoteViews buildRemoteView(Context context)
              {
                      RemoteViews remoteViews = new RemoteViews(context.getPackageName(),
                                      R.layout.widget_TEST);
                      if (widgets != null)
                      {
                              int length = widgets.length;
  
                              for (int i = 0; i &lt; length; i++)
                              {
                                      Intent configIntent = new Intent(context,
                                                      WidgetConfig.class);
  
                                      configIntent.setAction(Widget.PREFENCES_WIDGET_CONFIGURE);
                                      String number = AppWidgetManager.EXTRA_APPWIDGET_ID
                                                      + "number";
                                      configIntent.putExtra(number, length);
                                      String widgetID = AppWidgetManager.EXTRA_APPWIDGET_ID + i;
                                      int id = widgets[i];
                                      configIntent.putExtra(widgetID, id);
                                      PendingIntent runTESTPendingIntent = PendingIntent
                                                      .getActivity(context, 0, configIntent,
                                                                      PendingIntent.FLAG_UPDATE_CURRENT);
  
                                      remoteViews.setOnClickPendingIntent(R.id.TESTWidgetImage,
                                                      runTESTPendingIntent);
  
                                      Mngr controller = Mngr.getInstance();
  
                                      controller.updateTESTWidget(context, remoteViews);
                              }
                      }
                      return remoteViews;
              }
  
              @Override
              public void onConfigurationChanged(Configuration newConfig)
              {
                      int oldOrientation = this.getResources().getConfiguration().orientation;
  
                      if (newConfig.orientation != oldOrientation)
                      {
                              // Update the widget
                              RemoteViews remoteView = buildRemoteView(this);
  
                              // Push update to homescreen
                              Mngr.getInstance().pushUpdate(remoteView,
                                              getApplicationContext(), Widget.class);
                      }
              }
  
              @Override
              public IBinder onBind(Intent arg0)
              {
                      // TODO Auto-generated method stub
                      return null;
              }
      }
  }
  </code></pre>
  
  <p>my config activity</p>
  
  <pre><code>public class WidgetConfig extends ListActivity // implements
  {
      private Bundle m_extras;
      private ArrayList&lt;Test&gt; m_tests = null;
      private int mAppWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID;
      ImageAdapter m_adapter;
  
      @Override
      protected void onCreate(Bundle savedInstanceState)
      {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.imagelist);
  
              Resources res = getResources();
              Mngr mngr = Mngr.getInstance();
              mngr.setResources(res);
              Context ctx = getApplicationContext();
              mngr.setContext(ctx);
              getTests();
              m_adapter = new ImageAdapter(ctx, R.layout.row, m_tests);
              ImageDownloader.Mode mode = ImageDownloader.Mode.CORRECT;
              m_adapter.getImageDownloader().setMode(mode);
  
              setListAdapter(m_adapter);
  
              Intent intent = getIntent();
              m_extras = intent.getExtras();
      }
  
      private void getTests()
      {
              m_tests = new ArrayList&lt;Test&gt;();
  
              Resources res = getResources();
              String[] TestNames = res.getStringArray(R.array.fav_Test_array);
              TypedArray imgs = getResources().obtainTypedArray(
                              R.array.fav_Test_integer);
              for (int i = 0; i &lt; TestNames.length; i++)
              {
                  Test o1 = new Test();
                  String TestName = TestNames[i];
                  int resID = imgs.getResourceId(i, -1);
                  o1.setTestName(TestName);
                  o1.setIMGID(resID);
                  m_tests.add(o1);
              }
              imgs.recycle();
  
      }
  
      @Override
      protected void onListItemClick(ListView l, View v, int position, long id)
      {
  
          ListAdapter adapt = l.getAdapter();
          Object obj = adapt.getItem(position);
          if (obj != null)
          {
              Mngr mngr = Mngr.getInstance();
              Context context = getApplicationContext();
              String key = context.getString(R.string.TestWidget_string) + "_"
                  + AppWidgetManager.EXTRA_APPWIDGET_ID;
              Test Test = (Test) obj;
              String val = Test.getIMGID().toString();
              mngr.putString(context, key, val);
              updateWidget();
          }
  
          super.onListItemClick(l, v, position, id);
      }
  
      private void updateWidget()
      {
          Context ctx = getApplicationContext();
          AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(ctx);
          setResult(RESULT_CANCELED);
          if (m_extras != null)
          {
              Intent resultValue = new Intent();
  
              int numberOfWidgets = m_extras.getInt(
                  AppWidgetManager.EXTRA_APPWIDGET_ID + "number",
                  AppWidgetManager.INVALID_APPWIDGET_ID);
              for (int i = 0; i &lt; numberOfWidgets; i++)
              {
  
                  String stringID = AppWidgetManager.EXTRA_APPWIDGET_ID + i;
                  mAppWidgetId = m_extras.getInt(stringID,
                                  AppWidgetManager.INVALID_APPWIDGET_ID);
  
  
                  /*************************************************************/
                  /*I Don't really know if I am using this piece of code right */
                  Uri data = Uri.withAppendedPath(Uri.parse("ABCD"
                                  + "://widget/id/"), String.valueOf(mAppWidgetId));
                  resultValue.setData(data);
                  /*************************************************************/
  
                  RemoteViews views = new RemoteViews(ctx.getPackageName(),
                                  R.layout.widget_Test);
  
                  Mngr.getInstance().updateTestWidget(ctx, views);
  
                  appWidgetManager.updateAppWidget(mAppWidgetId, views);
                  resultValue.putExtra(stringID, mAppWidgetId);
              }
  
              setResult(RESULT_OK, resultValue);
              finish();
          }
      }
  }
  </code></pre>
  
  <p>My Mngr code</p>
  
  <pre><code>public void updateTestWidget(Context context, RemoteViews remoteViews)
  {
      String key = context.getString(R.string.TestWidget_string) + "_"
              + AppWidgetManager.EXTRA_APPWIDGET_ID;
  
      String s = getString(context, key, "");
      if (s != null &amp;&amp; s.equals("") == false)
      {
          int resID = Integer.valueOf(s);
          remoteViews.setImageViewResource(R.id.TestWidgetImage, resID);
      }
  }
  
  public void pushUpdate(RemoteViews remoteView, Context ctx, Class&lt;?&gt; cls)
  {
      ComponentName myWidget = new ComponentName(ctx, cls);
      AppWidgetManager manager = AppWidgetManager.getInstance(ctx);
      manager.updateAppWidget(myWidget, remoteView);
  }
  </code></pre>