处理小部件内的多个按钮 - Android

Handling multiple buttons inside a widget - Android

我有一个显示简单文本和 3 个按钮的小部件:

我已经设置了刷新按钮并且工作正常,但我似乎无法找到处理其他两个按钮的方法

PS. 我不需要实际代码 我已经知道如何进行复制和共享 我只需要知道如何 处理点击事件

到目前为止,这是我的代码:

Button copy_content;
Button share_content;

void updateAppWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId) {
    /** Code below will be executed once the timer is over*/
    String widgetText = RandQuotes[rand.nextInt(RandQuotes.length)];

    // Construct the RemoteViews object
    RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.quotes_widget);
    views.setTextViewText(R.id.sayings, widgetText);



    // Instruct the widget manager to update the widget
    appWidgetManager.updateAppWidget(appWidgetId, views);
}

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    // There may be multiple widgets active, so update all of them
    for (int appWidgetId : appWidgetIds) {
        updateAppWidget(context, appWidgetManager, appWidgetId);
    }
    final int count = appWidgetIds.length;

    for (int i = 0; i < count; i++) {
        int widgetId = appWidgetIds[i];
        String on_sayings = RandQuotes[rand.nextInt(RandQuotes.length)];

        RemoteViews remoteViews = new RemoteViews(context.getPackageName(),
                R.layout.quotes_widget);
        remoteViews.setTextViewText(R.id.sayings, on_sayings);

        Intent intent = new Intent(context, HavamalWidget.class);
        intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
        intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(context,
                0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
        remoteViews.setOnClickPendingIntent(R.id.switch_trigger, pendingIntent);
        appWidgetManager.updateAppWidget(widgetId, remoteViews);
    }

}

只需在带有操作的按钮上创建待定意图。所以在 onReceive() 中只需检查意图的动作并对其进行一些逻辑处理。如果你做一些长任务,最好把所有的逻辑都放在 IntentService 中。

像这样在 RemoteViews 中的按钮上设置待定意图:

public static final String ACTION_BUTTON_SHARE = "ACTION_BUTTON_SHARE";
public static final String ACTION_BUTTON_REFRESH = "ACTION_BUTTON_REFRESH";

Intent refreshIntent = new Intent(context, ExampleAppWidget.class)
            .setAction(ACTION_BUTTON_REFRESH);
PendingIntent refreshPI = PendingIntent.getBroadcast(context, 0, refreshIntent,
            PendingIntent.FLAG_UPDATE_CURRENT);
remoteViews.setOnClickPendingIntent(R.id.refresh_button, refreshPI);

Intent shareIntent = new Intent(context, ExampleAppWidget.class)
            .setAction(ACTION_BUTTON_SHARE);
PendingIntent sharePI = PendingIntent.getBroadcast(context, 0, shareIntent,
            PendingIntent.FLAG_UPDATE_CURRENT);
remoteViews.setOnClickPendingIntent(R.id.share_button, sharePI);

在 ExampleAppWidget.class 中(从 AppWidgetProvider 扩展)覆盖 OnReceive() 方法

@Override
public void onReceive(Context context, Intent intent) {
    if (intent != null) {
        if (intent.getAction().equals(ACTION_BUTTON_REFRESH)) {
           //make some logic here on button refresh
        } else if (intent.getAction().equals(ACTION_BUTTON_SHARE)) {
           //make some logic here on button share
        } else {
           super.onReceive(context, intent);
        }
    }
}