我正在主屏幕Activity
发布Widget
。执行此操作时,我希望将配置数据从Widget
传递到Activity
。所以我在Intent
添加了额外的数据,这很好。当我添加多个具有不同配置的Widget
时会出现问题。无论我点击哪个Widgets
,我总是得到最后添加的Widget
“实例”的配置。下面是我测试的一些测试代码,只是将appWidgetId
传递给Activity
。 Activity
应显示已点按的appWidgetId
的{{1}}。
Widget
而public class TestWidgetProvider extends AppWidgetProvider {
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
for (int i=0; i<appWidgetIds.length; ++i) {
updateAppWidget(context, appWidgetManager, appWidgetIds[i]);
}
}
private void updateAppWidget(Context context, AppWidgetManager appWidgetManager, int appWidgetId) {
RemoteViews updateViews = new RemoteViews(context.getPackageName(), R.layout.widget_layout);
updateViews.setTextViewText(R.id.text_view, "Id "+appWidgetId);
Intent intent = new Intent(context, TestActivity.class);
intent.putExtra("appWidgetId", appWidgetId);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
updateViews.setOnClickPendingIntent(R.id.text_view, pendingIntent);
appWidgetManager.updateAppWidget(appWidgetId, updateViews);
}
}
只是
Activity
在public class TestActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test);
TextView textView = (TextView)findViewById(R.id.app_text_view);
textView.setText("appWidgetId " + getIntent().getIntExtra("appWidgetId", -1));
}
}
我使用旗帜Intent
,这背后没有科学依据。首先,我将此作为0,但标志似乎改变了行为。如果没有旗帜,我会获得前一个FLAG_UPDATE_CURRENT
的{{1}},我会看到最后添加的ID
(我认为)。
从代码中可以看出这是行不通的。只调用方法Widget
几次,而不指定它所引用的ID
实例(setOnCkickPendingIntent
)。
有没有办法做到这一点,以便应用程序可以从Widget
获取配置数据?至少应该看到已经点击的小部件的appWidgetId
。
感谢您的帮助!