2012-02-12 33 views
0

我有一个简单的主屏幕小部件,它显示项目列表。由于我想支持较旧的设备,而不是ListView,因此我使用了一系列“模拟”ListView的TextView对象。小工具:区分具有相同ID的视图上的点击

它工作得很好,但我想为这些项目分配一个点击侦听器。在听众中,我想区分他们,并采取措施取决于项目的内容。

如何做到这一点?由于setOnClickPendingIntent需要视图的ID,因此我无法为单个项目分配单独的意图 - 它们都共享相同的ID,因此处理程序不会知道哪个项目被点击。我只能从XML布局实例化RemoteViews,所以我不能添加具有不同ID的项目(我需要创建很多布局文件,只有布局ID不同)。

由于Honeycomb有setOnClickFillInIntent方法以可接受的方式处理我的问题,但如果我想要我的小工具在姜饼上工作,我不能使用它。

回答

1

我无法为单个项目指定单独的意图 - 它们都共享相同的ID,因此处理程序不会知道哪个项目被点击。

您的小部件必须具有唯一的ID。

我可以实例只能从XML布局RemoteViews,所以我不能用不同的ID

当然,你可以添加项目。每个应用程序小部件大小都有一个布局文件(因此,如果您只支持一种大小,则可能只有一个布局文件周期)。在该布局文件中,您为您的小部件提供了唯一的ID。

+0

目前,我有一个小部件的布局文件,其中一个空容器和其他文件用于行布局。在小部件更新期间,我使用RemoteViews.addView(ID,RemoteViews)将行插入到该容器中。从我对你的理解中回答,你是否建议我应该在小部件XML中用不同的ID对一些行进行硬编码并停止使用addView(然后,为每个“行”设置clickIntents)? – user1234567 2012-02-12 21:03:44

+0

@ user1234567:那么,'addView()'逻辑对你没什么帮助。对于给定的应用部件大小,您只能拥有很多行。而且,您必须将此接口硬连接。而且,由于您无论如何都需要唯一的小部件ID,因此您可以手动将N行克隆到主应用小部件布局中,并提供唯一的ID。 – CommonsWare 2012-02-12 21:08:12

+0

好吧,这可能会更快一些,因为每次更新只会扩充一次XML,并且在此之后不会修改它的视图树(就像我以前用addView()方法)。谢谢! – user1234567 2012-02-12 21:11:40

0

你也许能够!我有同样的问题,但后来我意识到我一次一个地生成行(布局中的单个行,来自同一个模板的每行)。每一行都是它自己的RemoteViews,所以在这个for循环中,我自己设定了这个意图。例如,如果我加入新innerRemoteViews到outerRemoteViews,我称之为:

innerRemoteViews.setOnClickPendingIntent(R.id.inner_row_template_id, PendingIntent.getActivity(context, 0, intent, 0)); 

这种方式,意图被添加到innerRemoteViews,其中ID还是具体到该行。