2011-08-28 41 views
0

我是Android新手,所以每一個簡單的事情似乎都是一座山。
我正在實現一個應用程序(與背景接收器)聽電話和做些事情:這個工作,好的。
我試着添加一個小部件(從接收器更新)顯示一些狀態,但這不起作用,小部件沒有更新。從後臺接收器更新Widget

這是我的小部件的一部分:它啓動時顯示正確的狀態。

public class BlacklistWidget extends AppWidgetProvider { 

    RemoteViews remote; 
    ComponentName provider; 
    Context context; 

    @Override 
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, 
      int[] appWidgetIds) { 
     super.onUpdate(context, appWidgetManager, appWidgetIds); 

     // create the remote view 
     remote = new RemoteViews(context.getPackageName(), R.layout.widget); 
     provider = new ComponentName(context, BlacklistWidget.class); 

     this.context = context; 

     Resources r = context.getResources(); 
     String[] usage_arr = r.getStringArray(R.array.pref_usage_array); 
     int usage = Prefs.getUsage(); 
     Utils.Log("Widget onUpdate: " + usage); 
     // remote.setImageViewResource(R.id.icon_usage, 
     remote.setTextViewText(R.id.usage, usage_arr[usage]); 

     appWidgetManager.updateAppWidget(provider, remote); 
    } 
} 

當接收器改變靜態類的狀態,調用此方法:

public static void setUsage(int usage) { 
    Usage = USAGE.values()[usage]; 

    try { 
     Resources r = pcontext.getResources(); 
     String[] usage_arr = r.getStringArray(R.array.pref_usage_array); 
     remoteViews.setTextViewText(R.id.usage, usage_arr[usage]); 
     Utils.Log("Widget updated with " + usage); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

正如你所看到的,用於更新部件代碼是()包含在窗口更新一樣。
沒有發生異常,文本發送更新是正確的..但小部件TextView保持不變。

在清單插件定義爲foolows:

<receiver android:name=".BlacklistWidget" android:label="@string/app_name"> 
    <intent-filter> 
     <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 
    </intent-filter> 
    <meta-data android:name="android.appwidget.provider" 
     android:resource="@xml/widget_info" /> 
</receiver> 

我在做什麼錯?
有沒有更好的方法來達到我的目標?
非常感謝。

回答

1

你在做什麼setUsage不足以更新小部件:您必須致電updateAppWidget後更新RemoteViews實例。在您撥打Utils.Log("Widget updated with " + usage);的地方,您必須再次加載整個RemoteViews實例,請設置所有適當的屬性(包括您實際想要更新的文本視圖),然後致電updateAppWidget

+0

非常感謝:加入\t \t \t'setWithget'在'setUsage'結尾''appWidgetManager.updateAppWidget'提供程序!這是在我的眼睛下,但我沒有看到它。再次感謝 – Marco