在所有活动按钮上轻松设置setOnClickListener()

时间:2011-08-13 03:57:37

标签: java android

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

4 个答案:

答案 0 :(得分:13)

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

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

答案 1 :(得分:8)

<{1>}调用中的

获取根布局

onCreate

然后将其传递给此方法,(使用递归进行深度搜索按钮)

ViewGroup rootLayout=(ViewGroup) findViewById(R.id.root_layout);
祝你好运

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

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

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