android - AppWidget中的ImageButton更新源

标签 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));

最佳答案

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

调用 onUpdate() 所需的只是参数,您可以通过 Context 获取这些参数:

getAppWidgetIds()ComponentName 作为参数。 您可以像下面这样创建一个:

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

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

关于android - AppWidget中的ImageButton更新源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7589117/

相关文章:

android - 将 jar 移动到 eclipse 中的 libs 文件夹

android - 如何使用Kotlin排除Android项目中的类

android - 在 android :actionLayout not working 中切换(主开/关)

java - Android - 防止启动时出现白屏

android - 如何在将在 RemoteView 中使用的可绘制对象上设置滤色器?

android - 使用回调和处理程序更改 Android 中的 UI 元素

android - 创建具有不同点击状态的不规则形状的 ImageButton

android - Android View 中的橡皮擦

java - 带有图像和文本的 Android 选择器

Android:为什么我的按钮不填充父级?