3

单击小部件时我需要执行更多操作,使用此代码 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

图片2

当我点击图像 1 上的图标时,我想这样做,然后在图标 onClick 周围 6 个圆形圆圈,如 image2 所示。请帮我。

4

1 回答 1

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);
    }
}
于 2013-11-01T08:11:54.553 回答