多个小部件在点击每个小部件时给出相同的appWidgetId

时间:2017-03-25 18:14:44

标签: android android-widget

我需要在我的Android应用程序中创建Widgets类似于android中的联系人小部件的工作流程。但面临的问题是,如果同一应用程序中有n个小部件,则每个小部件具有不同的功能。如何区分每个小部件上的按钮点击。?

public class MyWidgetActivity extends AppWidgetProvider {

private static final String MyOnClick = "myOnClickTag";


static void updateAppWidget(Context context, AppWidgetManager appWidgetManager,
                            int appWidgetId) {

    CharSequence widgetText = MyWidgetActivityConfigureActivity.loadTitlePref(context, appWidgetId);
    // Construct the RemoteViews object
    RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.simple_widget);
    views.setTextViewText(R.id.appwidget_text, widgetText);


    views.setOnClickPendingIntent(R.id.actionButton, getPendingSelfIntent(context, MyOnClick,views.getLayoutId()));


    // 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);
        // Tell the AppWidgetManager to perform an update on the current app
        // widget
    }
}

@Override
public void onDeleted(Context context, int[] appWidgetIds) {
    // When the user deletes the widget, delete the preference associated with it.
    for (int appWidgetId : appWidgetIds) {
        MyWidgetActivityConfigureActivity.deleteTitlePref(context, appWidgetId);
    }
}

@Override
public void onEnabled(Context context) {
    // Enter relevant functionality for when the first widget is created
}

@Override
public void onDisabled(Context context) {
    // Enter relevant functionality for when the last widget is disabled
}

@Override
public void onReceive(Context context, Intent intent) {
    super.onReceive(context, intent);

    if (MyOnClick.equals(intent.getAction()))
    {

        int appWidgetId = intent.getIntExtra(EXTRA_APPWIDGET_ID,0);
        Log.e("KOKOKOKO :: ",""+appWidgetId);
        MyWidgetActivityConfigureActivity.loadIdPrefCallQuick(context,appWidgetId);
        //your onClick action is here
        Toast.makeText(context,"Quick Action Triggered",Toast.LENGTH_SHORT).show();


    }
    super.onReceive(context, intent);
}


static PendingIntent getPendingSelfIntent(Context context, String action, int appWidgtId)
{
    // if we brodcast than definetly we have to define ONRECEIVE
    Intent intent = new Intent(context, MyWidgetActivity.class);
    intent.putExtra(EXTRA_APPWIDGET_ID,appWidgtId);
    intent.setAction(action);
    return PendingIntent.getBroadcast(context, 0, intent, 0);
}

}

1 个答案:

答案 0 :(得分:1)

而不是这段代码(静态PendingIntent getPendingSelfIntent):

return PendingIntent.getBroadcast(context, 0, intent, 0);

你应该这样做:

return PendingIntent.getBroadcast(context, appWidgtId, intent, PendingIntent.FLAG_UPDATE_CURRENT);

这样你就可以获得独特的意图和独特的appWidgtId。 设置requestCode(getBroadcast的第二个属性)非常重要,因此不会发生冲突。