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

时间:2017-09-03 16:51:28

标签: java android widget android-widget

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

  • 刷新(选择另一个随机字符串并显示它)
  • 复制(将textview的内容复制到剪贴板)
  • 分享(将textview的内容分享给社交媒体等)

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

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

}

1 个答案:

答案 0 :(得分:0)

只需在按钮上执行挂起操作即可。所以在onReceive()中只需检查intent的动作并对其做出一些逻辑。如果你做了一些长任务,最好在IntentService中制作所有逻辑。

在RemoteViews中的按钮上设置挂起意图,如下所示:

select top 10 * from [" + fileName + "]

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

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, refreshPI);