窗口小部件:区分具有相同ID的视图的点击次数

时间:2012-02-12 20:46:16

标签: android android-intent homescreen

我有一个简单的主屏幕小部件,它显示了一个项目列表。由于我想支持旧设备,而不是ListView,我使用了一系列“模拟”ListView的TextView对象。

它工作得很好,但我想为这些项目分配一个点击监听器。在听众中,我想区分它们,并根据项目的内容采取行动。

怎么做?由于setOnClickPendingIntent获取视图的ID,因此我无法为单个项目分配单独的意图 - 它们都共享相同的ID,因此处理程序将不知道触发了哪个项目。我只能从XML布局实例化RemoteViews,所以我不能添加具有不同ID的项目(我需要创建大量的布局文件,只有布局ID不同)。

由于Honeycomb有setOnClickFillInIntent方法以可接受的方式处理我的问题,但如果我希望我的小部件可以在Gingerbread上工作,我就无法使用它。

2 个答案:

答案 0 :(得分:1)

  

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

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

  

我只能从XML布局实例化RemoteViews,所以我不能添加具有不同ID的项目

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

答案 1 :(得分:0)

你或许可以!我有同样的问题,但后来我意识到我一次生成一行(布局中的各行,同一模板中的每一行)。每一行都是它自己的RemoteViews,所以在for循环中,我设置了自己的意图。例如,如果我将新的innerRemoteViews添加到outerRemoteViews,我会调用:

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

这样,Intent就会被添加到innerRemoteViews中,其中id仍然特定于该行。