Reputation: 17
I'm trying to create some buttons (number buttons {0, 1, ..., 9}) the way I did that, is this:
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(getNumber.getText().toString().length()>=2)
return;
getNumber.setText(getNumber.getText().toString() + "1");
}
});
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(getNumber.getText().toString().length()>=2)
return;
getNumber.setText(getNumber.getText().toString() + "2");
}
});
button3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(getNumber.getText().toString().length()>=2)
return;
getNumber.setText(getNumber.getText().toString() + "3");
}
});
and so on ...
is there any better way to do this and prevent of writing the same things ?
Upvotes: 1
Views: 58
Reputation: 2138
set tag to every button like button1.Tag = 1;
button2.Tag = 2;
and so on. and if in layout android:tag="1"
for every button.
from @oneStepBack
button1.setOnClickListener(this);
button2.setOnClickListener(this);
button3.setOnClickListener(this);
button4.setOnClickListener(this);
button5.setOnClickListener(this);
//..
Activity Code:
@Override
public void onClick(View v)
{
doSomeTask(getNumber.getText().toString(), v.getTag());
}
doSomeTask from oneStepBack
private void doSomeTask(String text, String num) {
if(text.length()>=2)
return;
getNumber.setText(text + num);
}
That's the practice that i follow for multiple button with same feature!
Upvotes: 1
Reputation: 12953
You can make your code cleaner by doing:
button1.setOnClickListener(this);
button2.setOnClickListener(this);
button3.setOnClickListener(this);
button4.setOnClickListener(this);
button5.setOnClickListener(this);
//..
.
Now:
@Override
public void onClick(View v) {
switch(v.getId()) {
{
case button1:
doSomeTask(getNumber.getText().toString(), "1");
break;
case button2:
doSomeTask(getNumber.getText().toString(), "2");
break;
//...
}
}
Now the doSomeTask()
:
private void doSomeTask(String text, String num) {
if(text.length()>=2)
return;
getNumber.setText(text + num);
}
Upvotes: 3
Reputation: 5312
You can have the following method:
private void setupButton(int btnId, int num) {
Button btn = (Button) findViewById(btnId)
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(getNumber.getText().toString().length() >= num)
return;
getNumber.setText(getNumber.getText().toString() + num);
}
});
}
We pass the button resource ID and the corresponding number to this method for each button.
Upvotes: 2