Android 我有10个ImageButton如何让他们用一种方法做不同的事情

Android 我有10个ImageButton如何让他们用一种方法做不同的事情,android,Android,我有10个图像按钮,它们与下面名为badvs1到badvs5和goodvs1到goodvs5的按钮相同 <ImageButton android:id="@+id/badvs1" android:layout_width="120dp" android:layout_height="80dp" android:layout_below="@id/heroselected" android:layout_mar

我有10个图像按钮,它们与下面名为badvs1到badvs5和goodvs1到goodvs5的按钮相同

 <ImageButton
        android:id="@+id/badvs1"
        android:layout_width="120dp"
        android:layout_height="80dp"
        android:layout_below="@id/heroselected"
        android:layout_marginLeft="8dp"
        android:layout_marginTop="8dp"
        android:background="@null"
        android:onClick="changeHero"
        android:scaleType="fitXY"
        android:src="@drawable/prettypicture" />

单击后,他们会执行此操作,并且第一个按钮的所有功能都正常

public void changeHero(View v) {    
    for (int i = 0; i < heroImages.length; i++){
        if (badagainst[position][0] == heroImages[i]){
            position = i;
            heroSelect = heroImages[i];
            break;
        }
    }
    setImages();
}
public void changehor(视图v){
for(int i=0;i
它仅适用于第一个imagebutton,因为[position][0]是与该imagebutton关联的图像。我可以再创建同样的东西9次,改变一个变量baddainst[position][1]/baddainst[position][2]。。。goodcountry[position][0]/goodcountry[position][1]等。但是有没有更好的方法,我可以直接进行设置,这样所选的按钮就可以确定这一点


我对编程相当陌生,还没有完全掌握所有知识。

您没有给出正确的解释

可以将与视图关联的对象存储为标记

例如:

v.setTag("some info"); 

String info = v.getTag();
假设您只需要将代码缩短,而不只是复制粘贴内容-

试试这个-

public void changeHero(View v) {

    // To get name of the button pressed
    String buttonName = (String) getResources().getResourceName(v.getId());
    int index = Integer.parseInt(buttonName.replaceAll("\\D", ""));
    if(buttonName.contains("good")){
        for (int i = 0; i < heroImages.length; i++){
            if (goodagainst[position][index] == heroImages[i]){
                position = i;
                heroSelect = heroImages[i];
                break;
            }
        }
    }
    else{
        for (int i = 0; i < heroImages.length; i++){
            if (badagainst[position][index] == heroImages[i]){
                position = i;
                heroSelect = heroImages[i];
                break;
            }
        }
    }
    setImages();
}
public void changehor(视图五){
//获取按下按钮的名称
字符串按钮名称=(字符串)getResources().getResourceName(v.getId());
int index=Integer.parseInt(buttonName.replaceAll(“\\D”,”);
if(buttonName.contains(“good”)){
for(int i=0;i
这应该在按钮设置的函数中,或者您可以为所有按钮实现单击侦听器,并在类中单击按钮时获得回调

int id=v.getId()


您需要对照数组检查它吗?或者您可以检查单击了哪个按钮吗?目前我正在对照数组检查它。但是,如果有一种方法可以将图像ID从按钮上取下,我可以这样做。但是数组数组中的图像id(badagainst或goodagainst)必须与HeroMages数组中的id相匹配才能对照按下的按钮进行检查这看起来像我需要做的。我对其他解释中给出的链接感到困惑。我会测试它,让你知道,好的,这几乎是工作了。我必须在buttonName.startsWith(“viewtiful.jon.heroselector:id/good”)之前添加包名,我是通过使用toast消息发现这一点的。这是下一条我无法工作的线。我假定它会替换除最后一个字符以外的所有字符,如果我使用0-4而不是1-5并将其更改为整数,则最后一个字符将是索引的正确数字。我应该用其他字符替换“\\w”吗?我使用了3个独立的替换语句,一个是包名,另一个是goodvs和baddvs。这只留下了号码。我目不转睛地看着它,发现了integer.valueOf(buttonNumber.toString());Button number就是我所说的去掉所有字符的新字符串。非常感谢你的帮助,为我节省了很多时间我很高兴你帮了我的忙。。我已经更新了我的答案,只从字符串中提取数字,并用contains方法替换了STARTSTS。
switch(id)
{
   case R.id.button1:
        //your code;
        //break;
   case R.id. button2:
        //your code;
        //break;
   default:
}