Несколько OnClickListeners Android - PullRequest
1 голос
/ 13 марта 2012

У меня настроено 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 ]

1 голос
/ 13 марта 2012

OnClickListener дает вам только один параметр: View:

void onClick(View v);

Но вам не нужно передавать вопросы и «порядок» в методиметь то, что вы хотите.Одним из методов, который вы можете использовать, является 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;
}
0 голосов
/ 13 марта 2012

я думаю, что многие уже знают об этом, но есть ярлык, который вы можете использовать вместо различных экземпляров onClickListener и назначения их в коде с помощью setOnClickListener (x).

В вашей кнопке XML укажитеэто свойство android: onClick и присвойте ему понравившуюся строку, например,

android:onClick="clickOne"

В упражнении устанавливает этот xml в качестве представления содержимого, создайте метод с именем clickOne с параметром View.

public void clickOne(View view)

Все, что вы поместите в этот метод, будет выполнено, когда вы нажмете кнопку.

0 голосов
/ 13 марта 2012

Вы можете реализовать столько 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
    }
}
...