Hej.
Mam widet z buttonem i moim problemem jest to że gdy mam więcej niż jedną instancję wigdetu na pulpicie i kiedy chcę kliknąć przycisk to kliknięte zostają wszystkie a zostaje mi zwrócone ID ostatniego dodanego widgetu.
Na przykład, dodaję widget, dostaje on ID 100, kiedy kliknę na jego przycik dostę dobre ID = 100. Dodaje kolejny widget na pulpit, dostaje on ID 101, kiedy kilknę na jego przycisk dostaję 101 ale kiedy kilknę na ten pierwszy to uwaga, dostaję ID =101. Dlaczego tak się dzieje?
Ponieżej próbka mojego providera
public class SampleWidetProvider extends AppWidgetProvider {
public final static String ACTION_WIDGET_CLICK = "pl.app.bikespot.appwidget.MAIN_CLICK";
public final static String TAG = "WIDGET";
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
Log.e(TAG, "onUpdate");
RemoteViews remoteViews;
ComponentName watchWidget;
remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget);
watchWidget = new ComponentName(context, SampleWidetProvider.class);
int[] widgetIds = appWidgetManager.getAppWidgetIds(watchWidget);
for (int id: widgetIds) {
AppWidgetPref awp = AppWidgetPref.load(context, id);
Log.d(TAG, "IDS" + id);
remoteViews.setOnClickPendingIntent(R.id.asd, getPendingSelfIntent(context, ACTION_WIDGET_CLICK, id));
appWidgetManager.updateAppWidget(watchWidget, remoteViews);
}
}
protected PendingIntent getPendingSelfIntent(Context context, String action, int id) {
Intent intent = new Intent(context, SampleWidetProvider.class);
intent.putExtra("widgetId", id);
intent.setAction(action);
return PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
}
@Override
public void onReceive(final Context context, Intent intent) {
super.onReceive(context, intent);
RemoteViews remoteViews;
String action = intent.getAction();
remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget);
if (action.equals(ACTION_WIDGET_CLICK)) {
Bundle extras = intent.getExtras();
int widgetId = extras.getInt("widgetId");
Log.d("CLIK", ""+widgetId);
}
}
@Override
public void onEnabled(Context context)
{
Log.d(TAG, "onEnabled()");
}
@Override
public void onDisabled(Context context) {
Log.d(TAG, "onDisabled()");
}
@Override
public void onDeleted(Context context, int[] appWidgetIds) {
Log.d(TAG, "onDeleted()");
for (int appWidgetId : appWidgetIds) {
AppWidgetPref.delete(context, appWidgetId);
}
}
}