AppWidget的構造跟Activity完全不同,Life cycle大概是:
onEnabled-第一次放Widget上來時會呼叫,注意同一種Widget是可以同時放多個的
onUpdate-每個Widget放上來會跑一次,
之後依照updatePeriodMillis設定的時間會呼叫,最少30分鐘以上
onDeleted-每個Widget被移除時呼叫
onDisabled-最後一個Widget被移除時呼叫
基本上AppWidget沒辦法拿到View本體,所以能做的事很少
操作的話只能透過RemoteViews來做
然後觸發的事件也只能透過PendingIntent來發送Broadcast
在onUpdate中透過
RemoteViews remoteViews = new RemoteViews(PackageName, layout id);
remoteViews.setOnClickPendingIntent(Button id, PendingIntent);
remoteViews.setTextViewText(TextView id,current value);
appWithetManager.updateAppWidget(appWidgetId, removeViews);
來設定按鈕事件跟顯示的數字
再去onReceive接,透過
AppwidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
ComponentName componentName = new ComponentName(package name,Widget class name);
int[] appWidgetIds = appWidgetManager.getAppWidgetIds(componentName);
拿到參數可以用來呼叫onUpdate(context,appWidgetManager,appWidgetIds)
或是直接在BroadcastReceiver裡面做掉也不是不行
還有Widget本身的Life cycle也是由Broadcast維持的
所以Override掉onReceive時要小心一點,記得要call super
※ 引述《joyshe78904 (幾樓)》之銘言:
: 雖然在一般Activity下可以寫出計算機
: 但是要在widget下呈現 就有點卡住了
: 在繼承AppWidgetProvider的情況 也無法使用findViewById
: 自己有去google了一些教學
: 有搞懂可以用intent跳轉
: 不過還是不知道該如何呈現 按鈕計算的功能
: 有沒有大大可以指點一下!!
: 或是哪裡有google的原生widget計算機的code可以參考呢?