【问题标题】:Using same onClick listener with more than one view使用具有多个视图的相同 onClick 侦听器
【发布时间】:2011-03-07 20:06:45
【问题描述】:

我对许多项目使用相同的 onClick 侦听器。

当我点击时,我想知道是哪一个。

我知道我可以在 getId() 上执行 Switch 语句,但更希望能够获取项目的名称。 有什么简单的方法吗?

【问题讨论】:

  • 你说的物品名称是什么意思?

标签: android onclick listeners


【解决方案1】:

我认为当您说“获取名称”时所指的是资源中的 id 字符串。所以你会有一个类似的 switch 语句:

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

否则,请详细说明您要达到的目标。

【讨论】:

  • 我想要这个名字的原因是它给了我一个指向向量的指针。名字的最后一个字母是一个数字,它会给我指针。
  • 好吧,如果你使用上面的代码,只需根据视图 ID 设置向量的指针,如果速度是一个问题并且内存不是一个大问题,那么为什么不使用哈希图来使用 id 作为键获得更快的查找。注意:我要说的是停止将其称为“名称”,ID 表示一个整数,而您所指的“名称”是变量名称。要找出变量名,上面的简单 switch 语句为您提供。
  • 也许您可以为 XML 中的每个按钮添加一个唯一的 android:tag 字符串。然后,您可以使用 view.getTag("myTag") 获取“数据”。我不确定它是否是您需要的,但我发表评论以防万一任何人都可以使用它。
【解决方案2】:

你有几个选择。

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

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

这将归结为您要存储的内容和正在查看的内容。

【讨论】:

    【解决方案3】:

    只需创建一个实现 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);
    
    ...
    

    【讨论】:

    • 既然它们都是一样的,它有什么帮助?我确实考虑为每个项目编写一个监听器,但担心多个实例化的开销。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-17
    相关资源
    最近更新 更多