如何解决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 举报,一经查实,本站将立刻删除。