首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用widget id更新widget?

如何使用widget id更新widget?
EN

Stack Overflow用户
提问于 2012-01-07 21:14:02
回答 1查看 432关注 0票数 0

我正在实现另一个电池小部件:)我想让用户在开始时选择小部件外观,所以实际上我的初始布局是这样的:

代码语言:javascript
复制
    <ImageView
    android:id="@+id/battery_image_purple"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:contentDescription="battery image"
    android:src="@drawable/purple_p10"
    android:visibility="invisible" />

<ImageView
    android:id="@+id/battery_image_orange"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:contentDescription="battery image"
    android:src="@drawable/orange_p10"
    android:visibility="invisible" />

当小部件被添加到主屏幕时,用户将所需的变体保存到共享偏好中,作为key - widget id值变量id。

接下来,我希望根据该组合设置可见性:

代码语言:javascript
复制
                AppWidgetManager widgetManager = AppWidgetManager
                    .getInstance(getApplicationContext());
            RemoteViews rv = new RemoteViews(context.getPackageName(), R.layout.widget);
            for (int i = 0; i < widgetIds.length; i++) {

                widgetManager.updateAppWidget(widgetIds[i], rv);


                SharedPreferences preferences = PreferenceManager
                        .getDefaultSharedPreferences(getApplicationContext());
                int widgetVariant = preferences.getInt(
                        "ID"+widgetIds[i], 0);
                int batteryImageId=0;
                switch(widgetVariant){
                case 0:
                    batteryImageId = R.id.battery_image_purple;
                    break;
                case 1:
                    batteryImageId = R.id.battery_image_orange;
                    break;
                case 2:
                    batteryImageId = R.id.battery_image_blue;
                    break;
                }
                rv.setViewVisibility(batteryImageId, View.VISIBLE);



            }

我的问题是,上面的代码使用上次保存的设置更新小部件的所有实例-如何仅将更改应用于特定的小部件Id?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-07 22:09:57

我相信这一行决定了它是更新所有的应用程序,还是只更新你选择的应用程序:

代码语言:javascript
复制
for (int i = 0; i < widgetIds.length; i++) {
}

试着移除它吗?

另外,我认为这一行必须放在你正在做的事情的最后:

代码语言:javascript
复制
widgetManager.updateAppWidget(widgetIds[i], rv);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8769954

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档