Easy way to setOnClickListener() on all Activity Buttons
New to android development, but not entirely new to Java. Right now my code inside the onCreate() method is quite basic:
Button b1 = (Button) findViewById(R.id.button1);
Button b2 = (Button) findViewById(R.id.button2);
Button b3 = (Button) findViewByI开发者_如何转开发d(R.id.button3);
Button b4 = (Button) findViewById(R.id.button4);
Button b5 = (Button) findViewById(R.id.button5);
Button b6 = (Button) findViewById(R.id.button6);
Button b7 = (Button) findViewById(R.id.button7);
Button b8 = (Button) findViewById(R.id.button8);
Button b9 = (Button) findViewById(R.id.button9);
Button b10 = (Button) findViewById(R.id.button10);
Button b11 = (Button) findViewById(R.id.button11);
Button b12 = (Button) findViewById(R.id.button12);
Button b13 = (Button) findViewById(R.id.button13);
Button b14 = (Button) findViewById(R.id.button14);
Button b15 = (Button) findViewById(R.id.button15);
Button sqrt = (Button) findViewById(R.id.button16);
Button b17 = (Button) findViewById(R.id.button17);
Button b18 = (Button) findViewById(R.id.button18);
Button b19 = (Button) findViewById(R.id.button19);
Button b20 = (Button) findViewById(R.id.button20);
b1.setOnClickListener(this);
b2.setOnClickListener(this);
b3.setOnClickListener(this);
b4.setOnClickListener(this);
b5.setOnClickListener(this);
b6.setOnClickListener(this);
b7.setOnClickListener(this);
b8.setOnClickListener(this);
b9.setOnClickListener(this);
b10.setOnClickListener(this);
b11.setOnClickListener(this);
b12.setOnClickListener(this);
b13.setOnClickListener(this);
b14.setOnClickListener(this);
b15.setOnClickListener(this);
sqrt.setOnClickListener(this);
b17.setOnClickListener(this);
b18.setOnClickListener(this);
b19.setOnClickListener(this);
b20.setOnClickListener(this);
Surely there is an easier way than this. I attempted a simple for loop, but the id values of the buttons do not suit an increment of 'i'. Do I have to change the id values to make this method possible, or is there an easier way?
If it's relevant, I'm using the latest version of the Android SDK, plugin for Eclipse and the target version number is 2.3.3
Just a fun trick for you, since all your buttons are using the same listener, you could do something like this with less code (though it's less efficient, not likely to be noticeable though):
ViewGroup group = (ViewGroup)findViewById(R.id.myrootlayout);
View v;
for(int i = 0; i < group.getChildCount(); i++) {
v = group.getChildAt(i);
if(v instanceof Button) v.setOnClickListener(this)
}
in onCreate
call get the root layout
ViewGroup rootLayout=(ViewGroup) findViewById(R.id.root_layout);
then pass it to this method, (using recursive for deep search for buttons)
public void setAllButtonListener(ViewGroup viewGroup) {
View v;
for (int i = 0; i < viewGroup.getChildCount(); i++) {
v = viewGroup.getChildAt(i);
if (v instanceof ViewGroup) {
setAllButtonListener((ViewGroup) v);
} else if (v instanceof Button) {
((Button) v).setOnClickListener(myButtonsListener);
}
}
}
good luck
Create an array of buttons and do it in a loop:
int[] ids = { R.id.button1, R.id.button2 , ........... };
Button[] buttons = new Buttons[ids.length];
for (int i = 0; i < ids.length; ++i) {
buttons[i] = (Button)findViewByIf(ids[i]);
buttons[i].setOnClickListener(this);
}
Something a little less repetitive could be:
int[] ids = {R.id.button1, R.id.button2, ... };
for (int id:ids) {
Button b = (Button) findViewById(id);
b.setOnClickListener(this);
}
精彩评论