amal jofy
amal jofy

Reputation: 73

Multiple widgets giving same appWidgetId on click on each widgets

I need to create Widgets in my android app similar work flow of contact widgets in android. But the problem facing is if there are n widgets of the same application each widgets have different functionality. how to differentiate the button click on each widgets.?

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

}

Upvotes: 1

Views: 1211

Answers (1)

Smankusors
Smankusors

Reputation: 387

Instead of this code (static PendingIntent getPendingSelfIntent) :

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

You should do this :

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

This way you should get unique intent and also unique appWidgtId. It is important to set requestCode (2nd attribute of getBroadcast), so it wouldn't conflict.

Upvotes: 4

Related Questions