多个OnClickListeners Android

时间:2012-03-13 01:54:40

标签: android onclicklistener

我设置了10个按钮,这是十个问题的答案。单击某个按钮时,我在我的onClick方法中设置了一个switch语句,如下所示。我的问题是为所有按钮设置OnClickListeners的最佳方法是什么,我需要将2个数组传递给onClick方法,以便判断它是否正确?另外,我需要返回和整数值。感谢

public void onClick(View v, int[] qaarray, int questionorder) {
            int x=0;
            switch(v.getId())
            {
            case R.id.imageButton0:
                if(qaarray[0] == questionorder){
                    //correct
                }else{
                    //incorrect
                }
            break;
            case R.id.imageButton1:
                if(qaarray[1] == questionorder){
                    // correct
                }else{
                    //incorrect
                }
            break;
            case R.id.imageButton2:
                if(qaarray[2] == questionorder){
                    // correct
                }else{
                    //incorrect
                }
            break;
            case R.id.imageButton3:
                if(qaarray[3] == questionorder){
                    // correct
                }else{
                    //incorrect
                }
            break;
            case R.id.imageButton4:
                if(qaarray[4] == questionorder){
                    //correct
                }else{
                    //incorrect
                }
            break;
            case R.id.imageButton5:
                if(qaarray[5] == questionorder){
                    //correct
                }else{
                    //incorrect
                }
            break;
            case R.id.imageButton6:
                if(qaarray[6] == questionorder){
                    //correct
                }else{
                    //incorrect
                }
            break;
            case R.id.imageButton7:
                if(qaarray[7] == questionorder){
                    //correct
                }else{
                    //incorrect
                }
            break;
            case R.id.imageButton8:
                if(qaarray[8] == questionorder){
                    //correct
                }else{
                    //incorrect
                }
            break;
            case R.id.imageButton9:
                if(qaarray[9] == questionorder){
                    //correct
                }else{
                    //incorrect
                }
            break;
            default:
            throw new RuntimeException("Unknown button ID");
            }
        }

3 个答案:

答案 0 :(得分:1)

OnClickListener只为您提供一个参数,即视图:

void onClick(View v);

但是您不必将问题和“顺序”传递给方法以获得您想要的内容。您可以使用的技术之一是View的setTag()方法:

int[] button = new int[] { R.id.imageButton1, R.id.imageButton2.... };

private class AnswerPair{
    public int questionOrder;
    public int answer;
}

public void onCreate(Bundle bundle){
    for(int i=0; i<NO_OF_BUTTON; i++){
        AnswerPair ans = new AnswerPair();
        ans.questionOrder = i;
        ans.answer = 0; // SET this
        getViewById(button[i]).setTag(ans);
        getViewById(button[i]).setOnClickListener(this);
    }
}

public void onClick(View v){
    if (v.getTag() == null) return;

    try{
        AnswerPair answer = (ans)v.getTag();
        // Check answer == question order? index?

    }catch(exception e) return;
}

答案 1 :(得分:0)

您可以根据需要实现任意数量的OnClickListener,并为每个按钮分配不同的侦听器。

public void onCreate(Bundle bundle){
    setContentView(R.layout.main);
    Button b = (Button) findViewById(R.id.myButton)
    b.setOnClickListener(new MyListener());
}

private class MyListener implements OnClickListener {
    @Override
    public void onClick(View v) {
        // Your code here
    }
}

答案 2 :(得分:0)

我想很多人已经知道了这一点,但你可以使用一个快捷方式,而不是使用onClickListeners的不同实例,并使用setOnClickListener(x)在代码中分配它们。

在你的按钮XML中,给它android:onClick属性,并为它指定一个你喜欢的字符串,例如,

android:onClick="clickOne"

在活动中将此xml设置为其内容视图,使用View参数创建名为clickOne的方法。

public void clickOne(View view)

当您单击按钮时,将执行此方法的任何操作。