紧接上集,现在我们要实现对appwidget控件的更新。
首先是新知识点介绍:
RemoteViews:已经介绍过了,指的是appwidget中的所有的控件。
componentName:指的是appwidget整个这个对象。
其次提醒下大家,由于appwidget与我们的主进程不是同一个进程,所以我们不能像在主进程中那样的操作,先get一个控件,然后set一个控件。还记得我们第二集上讲的那个么,RemoteViews,我们通过这个对appwidget的控件进行操作。
这集目标是我们在appwidget中放入一个textview , 一个imageView,和一个button,我们点击这个button他的textview 和imageview都发生改变。
不多说,看代码:
1、首先在appwidget.xml中放入控件,没什么好解释的:
<TextView android:id="@+id/textview" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="你好啊,机器人" /> <Button android:id="@+id/button" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="测试按钮" /> <ImageView android:id="@+id/imageview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/android_icon_125" />
2、然后在我们的onReceive中进行操作:(这里我们自己定义了一个action,详情看上集)
要对控件更新,我们需要几个要点:1、获得控件 2、改变过程 3、将结果显示出来。
获得控件与改变我们需要remoteView,而将结果update出来我们需要AppWidgetManager与ComponentName。代码如下:
@Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub String action = intent.getAction(); if(action.equals(UPDATE_ACTION)){ System.out.println("onReceive-----"+action); //新建一个remoteViews,对控件进行操作。 RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.appwidget); //控件更新: remoteViews.setImageViewResource(R.id.imageview, R.drawable.dialog_icon); remoteViews.setTextViewText(R.id.textview, "请说火星文!"); //更新桌面。 //获得appwidgetmanager。 AppWidgetManager appwidgetManager = AppWidgetManager.getInstance(context); //获得componentName。 ComponentName componentname = new ComponentName(context, AppwidgetProvider.class); //更新: appwidgetManager.updateAppWidget(componentname, remoteViews); } else super.onReceive(context, intent); }
好了,运行下对不对呢?
打完收工!