我需要在单击窗口小部件时执行更多操作,使用此代码,onclick操作只会打开一个活动,是否可以添加onClickListener,我可以在活动打开之前添加更多代码和操作,如在活动中运行? 这是我的代码。
public class WidgetActivity extends AppWidgetProvider{
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
super.onUpdate(context, appWidgetManager, appWidgetIds);
for (int i = 0; i < appWidgetIds.length; i++) {
int appWidgetId = appWidgetIds[i];
Intent int1=new Intent();
int1.setClass(context, Splash.class);
PendingIntent pend1=PendingIntent.getActivity(context, 0, int1, 0);
RemoteViews view1=new RemoteViews(context.getPackageName(),
R.layout.widget_main_1);
view1.setOnClickPendingIntent(R.id.repClear, pend1);
appWidgetManager.updateAppWidget(appWidgetId, view1);
}
}
}
当我在图像1上的图标上拍摄然后在图标上点击6圈时,我想这样做,如图2所示。请帮帮我。
答案 0 :(得分:1)
单击小部件时,我需要执行更多操作 代码onclick操作只打开一个活动,是否可以添加 一个onClickListener,我可以在其中添加更多代码和操作 活动开始前的活动?
在实际场景中,当您单击元素时,您将调用Activity。如果要执行更多不同的操作,则必须调用Broadcast而不是Activity:
// calling Intent on your widget
Intent i = new Intent(context, WidgetActivity.class);
i.setAction("your.intent.filter.action.name"); // assign intent action
int flag = PendingIntent.FLAG_UPDATE_CURRENT;
PendingIntent pi = PendingIntent.getBroadcast(context, 0, i, flag);
view1.setOnClickPendingIntent(R.id.repClear, pi);
然后,您需要在窗口小部件中实现onReceive()
方法:
@Override
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
if (intent.getAction().equals("your.intent.filter.action.name")) {
// do your stuff
}
}
与其他PendingIntents相似。
如何更新小部件的示例(您可以从几乎所有位置明确地调用它):
public static void updateWidget(Context c, boolean hide) {
AppWidgetManager am = AppWidgetManager.getInstance(c);
ComponentName thisWidget = new ComponentName(c, WidgetActivity.class);
int[] allWidgetIds = am.getAppWidgetIds(thisWidget);
for (int widgetId: allWidgetIds) {
RemoteViews remoteViews = new RemoteViews(c.getPackageName(), layout);
if (!hide) {
remoteViews.setViewVisibility(viewId, View.VISIBLE);
}
else {
remoteViews.setViewVisibility(viewId, View.INVISIBLE); // OR GONE
}
// finally calling request for update of widget
am.updateAppWidget(widgetId, remoteViews);
}
}
<强>调用强>
@Override
public void onReceive(Context context, Intent intent) {
super.onReceive(context, intent);
if (intent.getAction().equals("your.intent.filter.action.name")) {
updateWidget(context, false);
}
if (intent.getAction().equals("your.another.intent.filter.action.name")) {
updateWidget(context, true);
}
}