在所有活动按钮上设置setOnClickListener()的简便方法

Android开发的新手,但不是全新的Java。 现在我在onCreate()方法中的代码是非常基本的:

Button b1 = (Button) findViewById(R.id.button1); Button b2 = (Button) findViewById(R.id.button2); Button b3 = (Button) findViewById(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); 

当然,有一种比这更简单的方法。 我尝试了一个简单的for循环,但按钮的id值不适合’i’的增量。 我是否必须更改id值才能使此方法成为可能,或者是否有更简单的方法?

如果它是相关的,我使用最新版本的Android SDK,Eclipse插件,目标版本号是2.3.3

对你来说只是一个有趣的技巧,因为你的所有按钮都使用相同的监听器,你可以用更少的代码做这样的事情(虽然效率较低,但不太可能引人注意):

 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) } 

onCreate调用中获取根布局

 ViewGroup rootLayout=(ViewGroup) findViewById(R.id.root_layout); 

然后将它传递给这个方法,(使用递归深度搜索按钮)

 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); } } } 

祝好运

创建一个按钮数组并在循环中执行:

 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); } 

重复性稍差的东西可能是:

 int[] ids = {R.id.button1, R.id.button2, ... }; for (int id:ids) { Button b = (Button) findViewById(id); b.setOnClickListener(this); }