开发者

Android widget button

i am using this tutorial to create a widget. My problem is with the buttons. In my widget there are three lines, each consists of a textview and three buttons. With the code below when user clicks on ButtonP1, ButtonP2 or ButtonP3 a toast msg should be seen with different messages. The problem is that no matter which button i click, i get the first toast msg every time ("Message for Button P1").

  public class HelloWidget extends AppWidgetProvider {

    public static String ACTION_WIDGET_CONFIGURE = "ConfigureWidget";
    public static String ACTION_WIDGET_RECEIVER = "ActionReceiverWidget";

        @Override
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
        context.startService(new Intent(context, UpdateService.class));
            Intent intent = new Intent(context, UpdateService.class); 
        context.startService(intent);

         RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widgetmain);

         Intent active = new Intent(context, HelloWidget.class);
         active.setAction(ACTION_WIDGET_RECEIVER);
         active.putExtra("msg", "Message for Button P1");

         PendingIntent actionPendingIntent = PendingIntent.getBroadcast(context, 0, active, 0);
         remoteViews.setOnClickPendingIntent(R.id.ButtonP1, actionPendingIntent);

         Intent active2 = new Intent(context, HelloWidget.class);
         active2.setAction(ACTION_WIDGET_RECEIVER);
         active2.putExtra("msg", "Message for Button P2");

         PendingIntent actionPendingIntent2 = PendingIntent.getBroadcast(context, 0, active2, 0);
         remoteViews.setOnClickPendingIntent(R.id.ButtonP2, actionPendingIntent2);

         Intent active3 = new Intent(context, HelloWidget.class);
         active3.setAction(ACTION_WIDGET_RECEIVER);
         active3.putExtra("msg", "Message for Button P3");

         PendingIntent actionPendingIntent3 = PendingIntent.getBroadcast(context, 0, active3, 0);
         remoteViews.setOnClickPendingIntent(R.id.ButtonP3, actionPendingIntent3);

         appWidgetManager.updateAppWidget(appWidgetIds, remoteViews);

   }

    @Override
    public void onReceive(Context context, Intent intent) {

        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 {
          // check, if our Action was called
          if (intent.getAction().equals(ACTION_WIDGET_RECEIVER)) {
        String msg = "null";
        try {
        msg = intent.getStringExtra("msg");
        } catch (NullPointerException e) {
        Log.e("Error", "msg = null");
        }
        Toast.makeText(context, msg, Toast.LENGTH_SHORT).show();
     }
          super.onReceive(context, intent);
         }

    }


}

I don't think the .xml file for the layout is necessary so i am not wasting space with it.

What am i missing?

Solution

Intent configIntent4 = new Intent(context, Call1.class);
 开发者_StackOverflow中文版        configIntent4.setAction(ACTION_WIDGET_CONFIGURE);
         PendingIntent configPendingIntent4 = PendingIntent.getActivity(context, REQUEST_CODE_FOUR, configIntent4, 0);
         remoteViews.setOnClickPendingIntent(R.id.Button01, configPendingIntent4);


         Intent configIntent5 = new Intent(context, Call2.class);
         configIntent5.setAction(ACTION_WIDGET_CONFIGURE);
         PendingIntent configPendingIntent5 = PendingIntent.getActivity(context, REQUEST_CODE_FIVE, configIntent5, 0);
         remoteViews.setOnClickPendingIntent(R.id.Button02, configPendingIntent5);


         Intent configIntent6 = new Intent(context, Call3.class);
         configIntent6.setAction(ACTION_WIDGET_CONFIGURE);
         PendingIntent configPendingIntent6 = PendingIntent.getActivity(context, REQUEST_CODE_SIX, configIntent6, 0);
         remoteViews.setOnClickPendingIntent(R.id.Button023 configPendingIntent6);


PendingIntent.getBroadcast(context, 0, active, 0) Parameters: context The Context in which this PendingIntent should perform the broadcast. requestCode Private request code for the sender (currently not used). intent The Intent to be broadcast. flags

You should use different requestCode.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜