如何知道点击的小部件ID?

时间:2013-03-21 15:28:27

标签: android android-intent android-widget

我已使用widgetImageButton实施了TextViewImageButton点击后activity发出activity。此EditText使用用户在活动for (int widgetId : allWidgetIds) { // Create some random data int number = (new Random().nextInt(100)); RemoteViews remoteViews = new RemoteViews(getApplicationContext() .getPackageName(), R.layout.widget_layout); Log.w("WidgetExample", String.valueOf(number)); //Here I should set text from edit text, but I'm using a random for testing. remoteViews.setTextViewText(R.id.textView1, "Random: " + String.valueOf(number)); appWidgetManager.updateAppWidget(widgetId, remoteViews); } 上写的内容更新窗口小部件文本。现在的问题是我只知道如何获得这样的ID:

for

此代码显然会更改所有ID的数据,因为它位于for内。无论如何我可以用我的意图通过点击的widgetId,所以我可以消除@Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { // Get all ids ComponentName thisWidget = new ComponentName(context, Widget.class); allWidgetIds = appWidgetManager.getAppWidgetIds(thisWidget); for (int widgetId : allWidgetIds) { Intent i = new Intent(context, WidgetSetup.class); i.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, allWidgetIds); i.setFlags(i.FLAG_ACTIVITY_NEW_TASK); context.startActivity(i); // Create some random data int number = (new Random().nextInt(100)); RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout); // Set the text remoteViews.setTextViewText(R.id.textView1, String.valueOf(number)); Intent active = new Intent(context, Widget.class); active.setAction(ACTION_WIDGET_REFRESH); PendingIntent actionPendingIntent = PendingIntent.getBroadcast(context, 0, active, 0); remoteViews.setOnClickPendingIntent(R.id.imageButton1, actionPendingIntent); active = new Intent(context, Widget.class); active.setAction(ACTION_WIDGET_SETTINGS); actionPendingIntent = PendingIntent.getBroadcast(context, 0, active, 0); remoteViews.setOnClickPendingIntent(R.id.imageButton2, actionPendingIntent); appWidgetManager.updateAppWidget(appWidgetIds, remoteViews); } } @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals(ACTION_WIDGET_REFRESH)) { //Log.i("onReceive", ACTION_WIDGET_REFRESH); Intent i = new Intent(context, MainActivity.class); i.setFlags(i.FLAG_ACTIVITY_NEW_TASK); context.startActivity(i); } else if (intent.getAction().equals(ACTION_WIDGET_SETTINGS)) { //Log.i("onReceive", AppWidgetManager.EXTRA_APPWIDGET_ID); Intent i = new Intent(context, WidgetSetup.class); i.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, allWidgetIds); //Here I tried to pass the widgetID with no luck. //i.putExtra(pass widget id?); i.setFlags(i.FLAG_ACTIVITY_NEW_TASK); context.startActivity(i); } else { super.onReceive(context, intent); } } ?这是我的widgetProvider:

{{1}}

由于

2 个答案:

答案 0 :(得分:10)

对于正在运行的示例,请查看MiniCallWidget行97和169的代码。

答案 1 :(得分:1)

为你在onClick上启动的意图添加一个Extra,并在for循环中创建,指定正在设置的当前小部件的ID。

然后从接收活动中的附加内容中检索ID,并在完成后将其传回。然后使用返回的ID仅对一个小部件进行更改。

你可以通过if-else来检查一个标志,告诉你是否只更新一个小部件。