2017-03-25 8 views
0

私はアンドロイドアプリでウィジェットを作成する必要があります。しかし、問題が直面しているのは、それぞれのウィジェットが異なる機能を持つ同じアプリケーションのn個のウィジェットがある場合です。どのように各ウィジェットのボタンのクリックを区別するか?複数のウィジェットは、それぞれのウィジェットをクリックすると同じappWidgetIdを与えます

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

あなたはこれを行う必要があります:代わりにこのコード(静的PendingIntent getPendingSelfIntent)の

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

} 

答えて

0

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

あなたはユニークな意図ともユニークappWidgtIdを取得する必要がありますこの方法です。 requestCode(getBroadcastの2番目の属性)を設定することが重要です。したがって、競合しません。

関連する問題