我试图将多个视图添加到ViewFlipper,这是在一个AppWidget(一个主屏幕小部件)。下面是我的代码:
for (Item item : list) {
RemoteViews rv = new RemoteViews(getPackageName(),
R.layout.widget_item);
rv.setTextViewText(R.id.txtTitle, item.getTitle());
Intent launchIntent = new Intent(this, ActItemViewer.class);
launchIntent.putExtra("id", item.getId());
PendingIntent pendingIntent = PendingIntent.getActivity(
this, id, launchIntent, 0);
rv.setOnClickPendingIntent(R.id.txtTitle, pendingIntent);
views.addView(R.id.viewFlipper, rv);
}
这段代码运行良好,所有项目都显示在我的小部件中。但是当我点击ViewFlipper中的一个项目时,ActItemViewer总是以相同的"id"打开。所以我认为只有第一个PendingIntent被设置。
是否有任何方法有不同的onclick事件在ViewFlipper的每一个孩子?我曾见过一些具有此功能的widget,例如"Spiegel Online"-Widget(德语),或者Market-Widget。
一个不需要随机性的更简单的解决方案是,你可以像这样将所有额外的内容嵌入到数据字符串中,以使意图唯一:
intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));
我在这里找到了解决方案。
我只需要使用launchIntent.setAction("" + Math.random())
使每个Intent对系统来说是唯一的。(这些额外的功能不会使Intent独一无二,因为Android不会检查它们是否不同)。