微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Android Widget按钮

如何解决Android Widget按钮

| 在本教程中,我创建了带有按钮的小部件。在下面的代码中,当我单击ButtonP1时,会看到吐司味精。我也尝试对ButtonP2执行相同的操作,但是只能看到一个Toast msg设置为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,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,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);
     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变量为null。     

解决方法

        检索将执行广播的PendingIntent时,必须使用不同的请求代码。如果不是,则
PendingIntent.getBroadcast(..)
会根据您的情况返回一个已有的,并带有您的第一个Intent的消息。
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);
    ....
}
    

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。