Кнопка виджета Android - PullRequest
0 голосов
/ 18 июня 2011

с это учебник Я создал виджет с кнопками. В приведенном ниже коде, когда я нажимаю на ButtonP1, появляется сообщение о тосте. Я пытаюсь сделать то же самое с ButtonP2 также, но виден только один тост сообщения, который установлен на ButtonP1. Как я могу сделать так, чтобы при нажатии кнопки ButtonP2 появлялось еще одно сообщение с тостом?

    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));

        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);

         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 
    {
        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, "Out: " + msg, Toast.LENGTH_SHORT).show();
        }
        super.onReceive(context, intent);
    }
}
}

Я пробовал это (ACTION_WIDGET_RECEIVER2 вместо ACTION_WIDGET_RECEIVER)

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

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

с

if (intent.getAction().equals(ACTION_WIDGET_RECEIVER2)) 
                {
                    String msg2 = "null";
                    try {
                        msg2 = intent.getStringExtra("msg2");
                        } catch (NullPointerException e) {
                        Log.e("Error", "msg = null");
                        }
                        Toast.makeText(context, "Out2: " + msg2, Toast.LENGTH_SHORT).show(); //null
                }

после той же строки if. В этом случае переменная msg2 равна нулю.

1 Ответ

2 голосов
/ 18 июня 2011

При получении PendingIntent, который будет выполнять трансляцию, вам придется использовать разные коды запросов. Если нет, то PendingIntent.getBroadcast(..) вернет существующий в вашем случае с сообщением из вашего первого намерения.

private static final int REQUEST_CODE_ONE = 10;
private static final int REQUEST_CODE_TWO = 20;

....

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    ....
    PendingIntent actionPendingIntent = PendingIntent.getBroadcast(context, REQUEST_CODE_ONE, active, 0);
    ....

    PendingIntent actionPendingIntent2 = PendingIntent.getBroadcast(context, REQUEST_CODE_TWO, active2, 0);
    ....
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...