Подтвердить что ты не робот

Можете ли вы использовать один и тот же OnClickListener для разных кнопок?

В андроиде я могу использовать тот же OnClickListener для разных кнопок? Если да, как мне получить, с какой кнопки вызывается клик? В настоящее время у меня есть 4 кнопки, и каждая кнопка имеет свой собственный OnClickListener. Каждый из OnClickListener делает то же самое, за исключением того, что вы нажимаете текст кнопки. Я хочу создать единственный OnClickListener, но я не могу понять, как определить, какая кнопка нажата. Спасибо вам

protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

        mTts = new TextToSpeech(this, new TextToSpeech.OnInitListener() {

            @Override
            public void onInit(int arg0) {
                // TODO Auto-generated method stub

            }
        });
        setContentView(R.layout.home);
        Button button1 = (Button)findViewById(R.id.button1);
        Button button2 = (Button)findViewById(R.id.button2);
        Button button3 = (Button)findViewById(R.id.button3);
        Button button4 = (Button)findViewById(R.id.button4);

        //Load First Word
        button1.setOnClickListener(button1ClickListener);
        button2.setOnClickListener(button2ClickListener);
        button3.setOnClickListener(button3ClickListener);
        button4.setOnClickListener(button4ClickListener);

    }

Код для слушателя с другой частью, выделенной жирным шрифтом

private OnClickListener button1ClickListener = new View.OnClickListener() {
    @Override
    public void onClick(View arg0) {
        **Button button = (Button)findViewById(R.id.button1);**
        handleButtonClick(button);
    }
};

private OnClickListener button2ClickListener = new View.OnClickListener() {
    @Override
    public void onClick(View arg0) {
        **Button button = (Button)findViewById(R.id.button2);**
        handleButtonClick(button);

    }
};

private OnClickListener button3ClickListener = new View.OnClickListener() {
    @Override
    public void onClick(View arg0) {
        **Button button = (Button)findViewById(R.id.button3);**
        handleButtonClick(button);

    }
};

private OnClickListener button4ClickListener = new View.OnClickListener() {
    @Override
    public void onClick(View arg0) {
        **Button button = (Button)findViewById(R.id.button4);**
        handleButtonClick(button);

    }
};

Код для handleButtonclick

private void handleButtonClick(Button button) {
        if(button.getText().equals(currentWord)){
            currentScore += availableScore;
            TextView score = (TextView)findViewById(R.id.textViewScore);
            score.setText(String.valueOf(score));
            currentIndex++;
            availableScore = 4;
            InitializeGame();
        }
        else{
            availableScore--;
            button.setEnabled(false);
        }
    }

С рекомендацией от Karthik я изменил свой код на следующее:

protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);

        mTts = new TextToSpeech(this, new TextToSpeech.OnInitListener() {

            @Override
            public void onInit(int arg0) {
                // TODO Auto-generated method stub

            }
        });
        setContentView(R.layout.home);
        Button button1 = (Button)findViewById(R.id.button1);
        Button button2 = (Button)findViewById(R.id.button2);
        Button button3 = (Button)findViewById(R.id.button3);
        Button button4 = (Button)findViewById(R.id.button4);

        //Load First Word
        button1.setOnClickListener(buttonClickListener);
        button2.setOnClickListener(buttonClickListener);
        button3.setOnClickListener(buttonClickListener);
        button4.setOnClickListener(buttonClickListener);

    }

OnClickListenerCode

private OnClickListener buttonClickListener = new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {
            handleButtonClick((Button)arg0);
        }
    };
4b9b3361

Ответ 1

Да, это возможно. Я написал пример ниже, который должен быть относительно прямым.

Как обычно, добавьте OnClickListener для всех кнопок следующим образом:

btn1.setOnClickListener(this);
btn2.setOnClickListener(this);
btn3.setOnClickListener(this);

затем добавьте событие onClick(), как показано ниже:

@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    if(v == btn1){
        //Things to do  
    }
    if(v == btn2){
        //Things to do      
    }
    if(v == btn3){
        //Things to do  
    } 
}

Это должно работать нормально. Не забудьте внедрить View.OnClickListener для вашего класса, в котором присутствует ваш onCreate, иначе все те инструкции, которые устанавливают OnClickListener выше, будут неверными.

Ответ 2

    protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);

            mTts = new TextToSpeech(this, new TextToSpeech.OnInitListener() {

                @Override
                public void onInit(int arg0) {
                    // TODO Auto-generated method stub

                }
            });
            setContentView(R.layout.home);
            Button button1 = (Button)findViewById(R.id.button1);
            Button button2 = (Button)findViewById(R.id.button2);
            Button button3 = (Button)findViewById(R.id.button3);
            Button button4 = (Button)findViewById(R.id.button4);

            //Load First Word
            button1.setOnClickListener(button1ClickListener);
            button2.setOnClickListener(button2ClickListener);
            button3.setOnClickListener(button3ClickListener);
            button4.setOnClickListener(button4ClickListener);

        }

    @Override
        public void onClick(View v)

    {

    int id = v.getId();
    switch (id) {  
    case R.id.button1:  
    //your code
    break;
 case R.id.button2:  

    break;
 case R.id.button3:  

    break;
    }
    }