クリックすると乱数を生成するウィジェットをアンドロイドで作成しています。ウィジェットがホーム画面に単独である場合は完全に機能しますが、ウィジェットを複数追加すると、同時に乱数が生成され始めます。個々のウィジェットをクリックすると、すべてのウィジェットが更新されます。多くの乱数が発生します。私が望むのは、各ウィジェットを他のウィジェットから分離することです。基本的に、ウィジェットをクリックすると、それ自体のみが更新され、その周りの他のウィジェットは更新されません。これは、すべてのウィジェットを更新する update メソッドとは対照的に、現在のウィジェットの ID を取得し、その ID のみを更新することで達成できると思います。どうすればいいですか?
私のコード
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager,
int[] appWidgetIds) {
// Get all ids
ComponentName thisWidget = new ComponentName(context,
MyWidgetProvider.class);
int[] allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget);
for (int widgetId : allWidgetIds) {
// Create some random data
int number = (new Random().nextInt(100));
RemoteViews remoteViews = new RemoteViews(context.getPackageName(),
R.layout.widget_layout);
Log.w("WidgetExample", String.valueOf(number));
// Set the text
remoteViews.setTextViewText(R.id.update, String.valueOf(number));
// Register an onClickListener
Intent intent = new Intent(context, MyWidgetProvider.class);
intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context,
0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
remoteViews.setOnClickPendingIntent(R.id.update, pendingIntent);
appWidgetManager.updateAppWidget(widgetId, remoteViews);
}
}
概要:
このコードは update メソッドであり、ウィジェットがクリックされたときに呼び出されます。このメソッドでは、ホーム画面上のすべてのウィジェット ID を更新するのではなく、それを呼び出したウィジェット ID のみを更新する必要があります。