我正在尝试根据RemoteViews复制ToggleButton的功能,所以我可以在我的App Widget中使用。我有一个ImageButton,我已经检测到了点击次数,但我在更改点击时显示的图像时遇到了问题。我的印象是我需要在单击它以显示更改后强制更新小部件。知道什么是最好的方法吗?
public class WifiWidget extends AppWidgetProvider {
boolean toggleState = false;
public static String ACTION_WIDGET_RECEIVER = "com.nickavv.cleanwidgets.WIFICLICK";
Context myContext;
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int appWidgetIds[]) {
final int N = appWidgetIds.length;
myContext = context;
for (int i = 0; i < N; i++) {
int appWidgetId = appWidgetIds[i];
RemoteViews views = new RemoteViews("com.nickavv.cleanwidgets", R.layout.wifi_toggle_layout);
Intent intent = new Intent(ACTION_WIDGET_RECEIVER);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
views.setOnClickPendingIntent(R.id.wifiToggleButton, pendingIntent);
appWidgetManager.updateAppWidget(appWidgetId, views);
}
}
@Override
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
if (intent.getAction().equals(ACTION_WIDGET_RECEIVER)) {
switchToggle();
}
}
void switchToggle() {
RemoteViews views = new RemoteViews("com.nickavv.cleanwidgets", R.layout.wifi_toggle_layout);
Log.d("toggleState",""+toggleState);
if(toggleState == false) {
views.setImageViewResource(R.id.wifiToggleButton, R.drawable.wifi_toggle_on);
} else {
views.setImageViewResource(R.id.wifiToggleButton, R.drawable.wifi_toggle_off);
}
toggleState = !toggleState;
Log.d("toggleState",""+toggleState);
}
编辑:将其添加到switchToggle:
的底部AppWidgetManager myAWM = AppWidgetManager.getInstance(myContext);
ComponentName cn = new ComponentName(myContext, WifiWidget.class);
onUpdate(myContext, myAWM, myAWM.getAppWidgetIds(cn));
答案 0 :(得分:1)
是的,您必须更新小部件。从外观上看,您可以直接致电onUpdate()
并阅读其中的按钮状态,以相应地更新您的RemoteViews
。只需使用RemoteViews.setImageViewResource()
设置与当前按钮状态对应的图像。
您需要致电onUpdate()
的所有参数都可以通过Context
获得:
switchToggle()
并传递到onUpdate()
AppWidgetManager.getInstance(context)
AppWidgetManager.getAppWidgetIds()
getAppWidgetIds()
以ComponentName
为参数。
您可以创建如下所示的内容:
ComponentName cn = new ComponentName(context, WifiWidget.class);
您还可以使用此整个构造从任何给定点更新您的应用小部件,您不必onUpdate()
。在构建AppWidgetManager.updateAppWidget()
以发布它们(显示您的UI更改)后,只需使用附加RemoteViews
调用。