读书人

Jollen 的 Android 教,25: HelloApp

发布时间: 2012-09-04 14:19:30 作者: rapoo

Jollen 的 Android 教,#25: HelloAppWidgetProvider.ja
Jollen 的 Android 教,#25: HelloAppWidgetProvider.java 程式明

转载自:http://blog.chinaunix.net/u/14644/showart_1998061.html

HelloAppWidgetProvider.java 程式明



1: HelloAppWidgetProvider的
1是目前我的HelloAppWidget例,明如下:

onUpdate(): 收到ACTION_APPWIDGET_UPDATE,框架callback此method
onDelete(): 收到ACTION_APPWIDGET_DELETE,框架callback此method
AppWidgetManager: 管理App Widget的
先前,在AndroidManifest.xml我HelloAppWidgetProider可以接收 ACTION_APPWIDGET_UPDATE事件;ACTION_APPWIDGET_UPDATE是最主要的App Widget事件,AppWidgetProvider被要求App Widget提供”RemoteView”,就收到事件。

什是RemoteViews?

什是RemoteView呢?先看一下框架的,如2。

,「RemoteViews」就是表示UI的。res/layout/main.xml描述了用程式的UI,UI然包含多件 (Widget),而在先前的教到了一念「Android用程式的UI就是一View tree」,view tree就是「View Hierarchy」。

,RemotViews是一用表示View Hierarchy的。透RemoteViews可以找到UI的每一件。



2: RemoteView的(看全)
程式明: HelloAppWidgetProvider.java

onUpdate()的程式作:




public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
final int N = appWidgetIds.length;
for (int i=0; i<N; i++) {
int appWidgetId = appWidgetIds[i];
updateAppWidget(context, appWidgetManager, appWidgetId);
}
}


明如下:

1. onUpdate()更新「已安」在桌面上的App Widget容,因此我作一updateAppWidget()行真正更新的工作

2. onUpdate()的第二AppWidgetManager,是一「管理AppWidgetProvider」的,我必透框架 callback本方法回我的AppWidgetProvider物件,更新桌面上的App Widget

3. onUpdate()的第三appWidgetIds列,存放需要更新的App Widget ID;框架需要更新的App Widget之ID回onUpdate(),程式必「更新每一需要更新的App Widget。」

更新App Widget的方式是透AppWidgetManager完成,程式作:






static void updateAppWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId) {
CharSequence text;

text = "www.jollen.org";

RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.main);
views.setTextViewText(R.id.appwidget_text, text);

appWidgetManager.updateAppWidget(appWidgetId, views);
}
}

明如下:

1. 透UI layout取得自已的「View Hierarchy」(UI),以前面介的RemoteViews物件表示

2. 如2,呼叫RemoteView的setTextViewText()方法,修改UI的「R.id.appwidget_text」件,更文字容

3. 呼叫AppWidgetProvider的updateAppWidget()方法,更新我所指定的App Widget,其UI更新RemoteView的UI

4. updateAppWidget()的第二RemoteView,即明1.取得的UI,明2.修改了此UI的”R.id.appwidget_text”件,最後透App Widget Manager更新App Widget的UI

--jollen

读书人网 >Android

热点推荐