【问题标题】:How to update widget using widget id?如何使用小部件 ID 更新小部件?
【发布时间】:2012-01-07 22:09:57
【问题描述】:

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

    <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?

【问题讨论】:

  • 我说得对吗,您只想更新特定的 AppWidget istance?在您保存 appwidget 实例首选项的代码中,您只能为新的 appwidget 调用更新过程。
  • 是的,我想用不同的方式更新不同的实例。

标签: android widget


【解决方案1】:

我相信这条线决定了它是更新所有此类应用程序,还是只更新您选择的应用程序:

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

尝试删除它?

另外我认为这条线必须放在你正在做的事情的最后:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-11-04
    • 2019-02-06
    • 2019-01-14
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多