title: Android widget onclick listener for several buttons
body: <p>I am trying to create a widget for my application. From my reading an android developer site your onclick listeners all need to have an Intent. But what if I just want my button to update data in the widget itself and I don't want to start a new activity?</p>
  
  <p>Here is some Android demo code:</p>
  
  <pre><code>Intent intent = new Intent(context, ExampleActivity.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.appwidget_provider_layout);
  views.setOnClickPendingIntent(R.id.button, pendingIntent);
  </code></pre>
  
  <p>I want a button that when I click makes a http web call and then displays the results in the widget.  How do I go about doing this if I have to use intents? Also I need to be able to differentiate between which buttons where clicked.</p>
  
  <p>Why do widgets use intents and not the normal onclick listener where it calls a function like activities? </p>
  
  <p><strong>EDIT</strong></p>
  
  <p>My widget provider:</p>
  
  <pre><code>public class MyWidgetProvider extends AppWidgetProvider {
  
  private static final String MyOnClick1 = "myOnClickTag1";
  private static final String MyOnClick2 = "myOnClickTag2";
  private static final String MyOnClick3 = "myOnClickTag3";
  
  @Override
  public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
  
      // Get all ids
      ComponentName thisWidget = new ComponentName(context, MyWidgetProvider.class);
      int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget);
  
      for (int widgetId : allWidgetIds) {
  
          RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
  
          remoteViews.setOnClickPendingIntent(R.id.widget_button_stayarm, getPendingSelfIntent(context, MyOnClick1));
          remoteViews.setOnClickPendingIntent(R.id.widget_button_awayarm, getPendingSelfIntent(context, MyOnClick2));
          remoteViews.setOnClickPendingIntent(R.id.widget_button_dissarm, getPendingSelfIntent(context, MyOnClick3));
  
          remoteViews.setTextViewText(R.id.widget_textview_gpscoords, "gps cords");
  
          appWidgetManager.updateAppWidget(widgetId, remoteViews);
      }
  }
  
  protected PendingIntent getPendingSelfIntent(Context context, String action) {
      Intent intent = new Intent(context, getClass());
      intent.setAction(action);
      return PendingIntent.getBroadcast(context, 0, intent, 0);
  }
  
  @Override
  public void onReceive(Context context, Intent intent) {
  
      if (MyOnClick1.equals(intent.getAction())) {
          // your onClick action is here
          Toast.makeText(context, "Button1", Toast.LENGTH_SHORT).show();
          Log.w("Widget", "Clicked button1");
      } else if (MyOnClick2.equals(intent.getAction())) {
          Toast.makeText(context, "Button2", Toast.LENGTH_SHORT).show();
          Log.w("Widget", "Clicked button2");
      } else if (MyOnClick3.equals(intent.getAction())) {
          Toast.makeText(context, "Button3", Toast.LENGTH_SHORT).show();
          Log.w("Widget", "Clicked button3");
      }
  };
  }
  </code></pre>
  
  <p>My Android manifest:</p>
  
  <pre><code>&lt;receiver
      android:name="widget.MyWidgetProvider"
      android:icon="@drawable/fsk"
      android:label="FSK Widget" &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/example_appwidget_info" /&gt;
  &lt;/receiver&gt;
  </code></pre>