繁体   English   中英

如何使用小部件ID更新小部件?

[英]How to update widget using widget id?

我正在实现另一个电池小部件:)我想让用户在启动时选择小部件外观,所以实际上我的初始布局如下所示:

    <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" />

将窗口小部件添加到主屏幕后,用户会将所需的变体保存为共享的偏好设置,作为键-窗口小部件ID值-变体ID。

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

                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?

我相信这一行决定是更新所有该类型的应用程序,还是仅更新您选择的应用程序:

for (int i = 0; i < widgetIds.length; i++) {
}

尝试删除它?

我也认为这行必须在您做的事情的结尾:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM