Android 对多个视图使用相同的onClick侦听器

Android 对多个视图使用相同的onClick侦听器,android,onclick,listeners,Android,Onclick,Listeners,我对许多项使用相同的onClick侦听器 当我点击时,我想知道是哪一个 我知道我可以在getId()上执行Switch语句,但更希望能够获取项的名称。 有什么简单的方法可以做到这一点吗?您有几个选择 您可以使用创建的类扩展视图,该类包括其他可识别信息。然后在onClick中,将视图强制转换为类类型 您可以使用一个更好的管理器来管理您的视图。如果显示的是数据视图,而不是惰性布局或绘图,则这种方法最为有效 它将归结为您想要存储的内容和您正在查看的内容。我认为当您说“获取名称”时,您指的是参考资料中的

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

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

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

您有几个选择

  • 您可以使用创建的类扩展视图,该类包括其他可识别信息。然后在onClick中,将视图强制转换为类类型

  • 您可以使用一个更好的管理器来管理您的视图。如果显示的是数据视图,而不是惰性布局或绘图,则这种方法最为有效


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

    我认为当您说“获取名称”时,您指的是参考资料中的id字符串。所以你会有一个switch语句,比如:

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

    否则,请详细说明您试图实现的目标。

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

    你说项目名称是什么意思?我想要这个名称的原因是它给了我一个指向向量的指针。名称的最后一个字母是一个数字,它将给我指针。如果使用上面的代码,只需根据视图ID设置向量的指针,如果速度是一个问题,而内存不是一个大问题,那么为什么不使用hashmap来获得更快的查找,使用ID作为键。注意:我想说的是,不要把它称为“name”,ID代表一个整数,而您所指的“name”是变量名。为了找出变量名,上面简单的switch语句给出了这个变量名。也许可以为XML中的每个按钮添加一个唯一的android:tag字符串。然后可以使用view.getTag(“myTag”)获取“数据”。我不确定这是你所需要的,但我只是评论一下,以防任何人都可以使用它。因为它们都是一样的,它有什么帮助?我确实考虑过为每个项目编写一个侦听器,但是担心多个实例的开销。