2011-03-07 66 views
2

我正在使用同一个onClick侦听器处理多个项目。使用具有多个视图的相同onClick侦听器

当我点击我想知道哪一个。

我知道我可以在getId()上做Switch语句,但宁愿能够获取该项目的名称。 有没有简单的方法来做到这一点?

+1

什么时,你说该项目的名称意思? – 2011-03-07 20:11:45

回答

1

我想你说的“获取名称”是指资源中的id字符串。所以你会有一个开关语句,如:

switch(view.getId()) { 
    case R.id.HomeButtonOne: 
     // Do Button One Action 
     break; 
    case R.id.HomeButtonTwo: 
     // Do Button Two Action 
     break; 
} 

否则请详细说明你正在努力实现什么。

+0

我想要这个名字的原因是它给了我一个向量的指针。名字的最后一个字母是一个数字,它会给我指针。 – theblitz 2011-03-16 08:12:07

+0

那么,如果你使用上面的代码,只需设置取决于视图ID向量的指针,如果速度是一个问题和记忆是不是一个巨大的关注,那么为什么不使用HashMap来获得更快的查找,使用id作为关键。注意:我要说的是停止将此称为“名称”,ID表示一个整数,并且您所指的“名称”是变量名称。为了找出变量名,上面的简单switch语句给了你。 – 2011-03-16 12:44:08

+0

也许你可以添加一个独特的android:标记字符串到XML中的每个按钮。然后你可以使用view.getTag(“myTag”)来获取'数据'。我不确定这是你需要什么,但我发表评论,以防万一任何人都可以使用它。 – 2011-11-19 23:06:01

0

您有几个选项。

  1. 您可以使用您创建的类来扩展视图,并包含其他可识别信息。然后在onClick中,将视图转换为您的类类型。

  2. 您可以使用Adapter更好地管理您的观点。如果您显示的是数据视图而非惰性布局或Drawable,则此功能效果最佳。

这要归结为你想要存储什么和你正在查看什么。

0

只是要它实现OnClickListner类,并设置一个实例,以您的观点:

class MyListener implements OnClickListener() { 
// ... 
} 

MyListener listener = new MyListener(); 

View view = (View) findViewById(R.id.myViewId); 
view.setOnClickListener(listener); 
view = (View) findViewById(R.id.myAnotherViewId); 
view.setOnClickListener(listener); 

... 
+0

因为它们都一样,它有什么用?我曾考虑为每个项目编写一个监听器,但担心多个实例的开销。 – theblitz 2011-03-16 08:15:49

相关问题