【发布时间】:2014-04-18 20:08:21
【问题描述】:
我想制作一个带有 2 个按钮的小部件(一个是带有数字的 Textview)。一个按钮应该增加数字,另一个按钮减少它。
这是我的变量(2x 动作名称和数字的 int)
private static final String PLUS_ONE = "Plus1";
private static final String MINUS_ONE = "minus1";
static int counter = 0;
onUpdate():
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
final int N = appWidgetIds.length;
for (int i=0; i<N; i++) {
int appWidgetId = appWidgetIds[i];
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.plus1counter_widget);
remoteViews.setOnClickPendingIntent(R.id.counter_widget, getPendingSelfIntent(context, PLUS_ONE, counter));
remoteViews.setOnClickPendingIntent(R.id.img_downWid, getPendingSelfIntent(context, MINUS_ONE, counter));
appWidgetManager.updateAppWidget(appWidgetId, remoteViews);
}}
getPendingSelfIntent 是我创建意图的方法,将 int 值放入其中并返回 PendingIntent 这里详细介绍:
protected PendingIntent getPendingSelfIntent(Context context, String action, int i) {
Intent intent = new Intent(context, Plus1CounterAppWidgetProvider.class);
intent.setAction(action);
intent.putExtra("safeInt", i);
return PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);}
最后是我的 onReturn(),我想在其中将计数器设置为我给 Intent 的值并执行操作:
@Override
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
counter = intent.getIntExtra("safeInt", 0);
if (PLUS_ONE.equals(intent.getAction())) {
counter++;
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.plus1counter_widget);
remoteViews.setTextViewText(R.id.counter_widget, Integer.toString(counter));
AppWidgetManager.getInstance(context).updateAppWidget(new ComponentName(context, Plus1CounterAppWidgetProvider.class), remoteViews);
}
if (MINUS_ONE.equals(intent.getAction())) {
counter--;
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.plus1counter_widget);
remoteViews.setTextViewText(R.id.counter_widget, Integer.toString(counter));
AppWidgetManager.getInstance(context).updateAppWidget(new ComponentName(context, Plus1CounterAppWidgetProvider.class), remoteViews);
}}
通过调用
counter = intent.getIntExtra("safeInt", 0);
计数器始终设置为 0,这意味着没有额外的值。 我只是不明白为什么!任何解决方案? :)
【问题讨论】:
标签: android android-intent widget android-pendingintent