2017-03-25 2 views
0

J'ai besoin de créer des widgets dans mon application android flux de travail similaire de widgets de contact dans android. Mais le problème est que s'il y a n widgets de la même application, chaque widget a une fonctionnalité différente. comment différencier le bouton cliquez sur chaque widget.Plusieurs widgets donnant même appWidgetId sur cliquez sur chaque widget

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

} 

Répondre

0

Au lieu de ce code (PendingIntent getPendingSelfIntent statique):

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

Vous devriez faire ceci:

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

De cette façon, vous devriez obtenir l'intention unique et aussi appWidgtId unique. Il est important de définir requestCode (2ème attribut de getBroadcast), afin qu'il ne soit pas en conflit.