AppWidget中的ImageButton更新源代码

时间:2011-09-28 20:21:55

标签: android android-widget imagebutton

我正在尝试根据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));

1 个答案:

答案 0 :(得分:1)

是的,您必须更新小部件。从外观上看,您可以直接致电onUpdate()并阅读其中的按钮状态,以相应地更新您的RemoteViews。只需使用RemoteViews.setImageViewResource()设置与当前按钮状态对应的图像。

您需要致电onUpdate()的所有参数都可以通过Context获得:

getAppWidgetIds()ComponentName为参数。 您可以创建如下所示的内容:

ComponentName cn = new ComponentName(context, WifiWidget.class);

您还可以使用此整个构造从任何给定点更新您的应用小部件,您不必onUpdate()。在构建AppWidgetManager.updateAppWidget()以发布它们(显示您的UI更改)后,只需使用附加RemoteViews调用。