如何在AppWidgetProvider类中使用OnClickListener方法

时间:2013-11-01 08:04:21

标签: android android-widget

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

        }
}

}

Image1

Image2

当我在图像1上的图标上拍摄然后在图标上点击6圈时,我想这样做,如图2所示。请帮帮我。

1 个答案:

答案 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);
    }
}