我確定我錯過了一些東西,但我只是試圖用按鈕和計數器來獲取應用程序小部件。每次我點擊按鈕,我想計數器更新1.我如何更新Android appwidget的UI
我已經設置了WidgetProvider的onUpdate()函數來註冊一個掛起的事件到按鈕,以便它啓動一個服務,以衝擊計數器numbver :
Intent active = new Intent(context, CounterService.class);
active.setAction(CounterService.COUNT);
PendingIntent pending = PendingIntent.getService(context, 0, active, PendingIntent.FLAG_UPDATE_CURRENT);
views.setOnClickPendingIntent(R.id.CountButton, pending);
ComponentName component = new ComponentName(context.getPackageName(), KickCounterWidgetProvider.class.getName());
appWidgetManager.updateAppWidget(component, views);
在服務
然後CounterService ::在onStart()函數我碰到的計數(保存在首選項現在),然後嘗試和更新的文本字段,顯示當前計數值:
// ... bump the count here and store a string representation of it in currentCountString ...
RemoteViews remoteView = new RemoteViews(getApplicationContext().getPackageName(), R.layout.widget);
remoteView.setTextViewText(R.id.CurrentKickCount, currentCountString);
// apply changes to widget
AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(getApplicationContext());
ComponentName component = new ComponentName(getApplicationContext().getPackageName(), KickCounterWidgetProvider.class.getName());
appWidgetManager.updateAppWidget(component, remoteView);
明智地使用Logcat表明這一切都正常和字符串似乎是好的,但出於某種原因,對appWidgetManager.updateAppWidget()的調用由於某種原因似乎無聲無息地失敗。
我不知道它是否完全相關,但是我第一次將小部件的一個實例添加到主屏幕,甚至沒有按鈕的作用(即在提供程序中的onUpdate()中調用updateAppWidget()失敗)。對於在Provider中對updateAppWidget()的調用,該小部件的後續實例似乎可以正常工作,但從不適用於該服務。
任何幫助將不勝感激。
啊,有意思,我會檢查一下。順便說一句,我用http://github.com/commonsguy/cw-advandroid/tree/master/AppWidget/TwitterWidget/ ;-)開始了這一切。 – 2010-11-16 21:16:06
@Stevil Knevil:是的,這是一個不太複雜的示例。 _Android編程教程_中的一個與你正在設置的東西類似。 – CommonsWare 2010-11-16 22:24:20
這真的很奇怪,我已經根據這個例子重新實現了它,最後得到了許多更整潔的代碼!但唉,沒有改善。出於某種原因,對mgr.updateAppWidget(me,updateViews)的調用;似乎沒有工作。 這就像它更新小部件,但不強制重繪實例,因此創建新實例具有更新的UI,但創建後它們不會更改。 – 2010-11-17 21:51:21