2012-01-07 143 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);