我在android中製作了一個小部件,它在點擊時產生一個隨機數。當小部件在主屏幕上單獨使用時,它可以很好地工作,但是當您添加多個小部件時,他們會同時開始生成隨機數。發生什麼事情是當單個小部件被點擊時它會更新所有這些小部件;導致許多隨機數字。我想要的是每個部件都與其他部件隔離;基本上,當點擊一個小部件時,它只會更新自身而不更新其周圍的其他人。我認爲這可以通過獲取當前窗口小部件的ID並僅更新該窗口部件來實現,與update方法更新所有窗口部件相同;我該怎麼做呢?只更新更新方法中的當前Android小部件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);
}
}
摘要:
此代碼是更新的方法,並在單擊窗口小部件時被調用。我希望此方法只更新調用它的小部件ID,而不是用於更新主屏幕上所有小部件ID的此方法。
感謝你解決了一個非常棘手的錯誤。關鍵的事情是將唯一的RequestCode放入getBroadcast()或getActivity()調用中,以獲得待定的意圖,並避免重複使用。使用appWidgetId似乎爲我工作得很好。 – 2013-10-13 17:06:20
PendingIntent.getBroadcast()的最後一個參數是什麼意思?沒有值爲0的FLAG常量。 – cn123h 2016-01-19 07:28:03
好吧,我嘗試了不同的FLAG,它們都不起作用。正如Andrew和hasanghaforian提到的那樣,第二個參數requestCode必須對每個小部件實例都是唯一的。 – cn123h 2016-01-20 20:57:14