如何在执行小部件动作之前检查值是否已更改
我正在学习如何创建小部件,但我坚持了这一点。我有一个包含一个按钮的小部件,点击后会启动一个活动。但有两个活动可能启动,这取决于布尔值。如果当前Activity是MainActivity,则布尔值为true,否则为false。但是当点击按钮时,看起来布尔值在这里不会更新为新值。难道我做错了什么。任何帮助将被赏识。如何在执行小部件动作之前检查值是否已更改
public void onUpdate(final Context context, final AppWidgetManager appWidgetManager, final int[] appWidgetIds)
{
final int N = appWidgetIds.length;
for (int i = 0; i < N; i++)
{
final int appWidgetId = appWidgetIds[i];
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.rz_widget_layout);
Intent intent=null;
if(MainActivity.WidgetAppLuancherChecker){intent= new Intent(context, MainActivity.class);}
else{intent= new Intent(context, ActivityB.class);}
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
views.setOnClickPendingIntent(R.id.LaunchApp, pendingIntent);
appWidgetManager.updateAppWidget(appWidgetId, views);
}
}
清单
<receiver android:name="com.AppWidget.ApWidgetProvider" >
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@xml/info_widget_layout" />
</receiver>
public static boolean getLock(Context context) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
boolean lock = prefs.getBoolean("lock", true);
return lock;
}
public static void setLock(Context context, boolean isMainActivity) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean("lock", isMainActivity);
editor.commit();
}
使用SharedPreference。您可以尝试在MainActivity中实现这两种方法。将Lock方法设置为true或false以更改布尔变量。然后下一个点击你的小工具打开你的第二课。
if(MainActivity.getLock(context)){intent= new Intent(context, MainActivity.class);}
else{intent= new Intent(context, ActivityB.class);}
编辑:设置在SharedPreferences布尔变量后,您可以更新插件..
private void updateWidgetScreen(String updateData) {
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(this);
RemoteViews remoteViews = new RemoteViews(getPackageName(), R.layout.widget);
ComponentName thisWidget = new ComponentName(this, WidgetProvider.class);
remoteViews.setTextViewText(R.id.currency, " Dollar");
Intent intent = new Intent(this, WidgetService.class);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, MainUtils.getWidgetID(prefs));
intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));
remoteViews.setRemoteAdapter(MainUtils.getWidgetID(prefs), R.id.list_view, intent);
Intent clickIntent = new Intent(this, MainActivity.class);
PendingIntent clickPI = PendingIntent.getActivity(this, 0, clickIntent, PendingIntent.FLAG_UPDATE_CURRENT);
remoteViews.setPendingIntentTemplate(R.id.list_view, clickPI);
appWidgetManager.updateAppWidget(thisWidget, remoteViews);
}
感谢生病尝试在一分钟内 – 2015-03-31 07:10:25
仍然没有工作,我记录的价值和它的改变活动,但我注意到,如果我在onUpdate方法中放置一个日志,那么它将只在应用程序启动时被调用一次,而不是每次我点击所以也许这是相关的 – 2015-03-31 07:20:34
找到了解决方案使用Programmatically update widget from activity/service/receiver
当我更改活动中的布尔值时,我应该调用fol降脂:
Intent intent = new Intent(activity,ApWidgetProvider.class);
intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
int ids[] = AppWidgetManager.getInstance(activity.getApplication()).getAppWidgetIds(new ComponentName(activity.getApplication(), ApWidgetProvider.class));
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS,ids);
activity.sendBroadcast(intent);
的onUpdate方法:
public void onUpdate(final Context context, final AppWidgetManager appWidgetManager, final int[] appWidgetIds)
{
final int N = appWidgetIds.length;
for (int i = 0; i < N; i++)
{
final int appWidgetId = appWidgetIds[i];
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.rz_widget_layout);
Intent intent=null;
int j=0;
if(MainActivity.WidgetAppLuancherChecker){j=1;intent= new Intent(context, MainActivity.class);}
else{j=2;intent= new Intent(context, ActivityB.class);}
PendingIntent pendingIntent = PendingIntent.getActivity(context,j,intent,PendingIntent.FLAG_UPDATE_CURRENT);
views.setOnClickPendingIntent(R.id.RelativeWidget, pendingIntent);
appWidgetManager.updateAppWidget(appWidgetId, views);
}
}
上面的代码应该工作,什么是iisue呢? – IshRoid 2015-03-31 06:54:19
布尔值保留其默认值,不更新:/ – 2015-03-31 06:55:05
更新布尔值时,我应该调用某个函数吗? – 2015-03-31 06:55:26