2012-01-07 138 views
0

我执行另一个电池部件:) 我想让用户选择上开始小部件apparence,所以实际上我最初的布局看起来像这样:如何使用小部件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); 



      } 

我的问题是,上面的代码更新部件的所有实例与上次保存的设置 - 如何只适用于特定的部件编号的变化?

+0

我说得对不对您想更新只特定AppWidget istance?在你的代码中你保存了appwidget实例的首选项,你可以只为一个新的appwidget调用更新过程。 – Yury 2012-01-07 13:26:50

+0

是的,我想用不同的方式更新不同的实例。 – piotrpo 2012-01-07 13:33:36

回答

0

我相信这条线确定它是否更新所有该类型的应用程序,或只是一个选择:

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

尝试删除呢?

而且我认为,这条线必须在走到底你在做什么:

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