Можете ли вы использовать один и тот же 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);
}
};
Ответы
Ответ 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;
}
}