我试图通过遍历xml中的按钮(因为我有很多按钮)使生活变得轻松得多。为什么这不起作用?

Button bf[];
public static final int[] Buttons = { R.id.b1, R.id.b2, R.id.b3, R.id.b4,
        R.id.b5, R.id.b6, R.id.b7, R.id.b8, R.id.b9, R.id.bBack,
        R.id.bClearAll, R.id.bClear };


我有一个静态的final int,其中保存有一些按钮,这些按钮在标题中列出。
在我的onCreate方法中,我设置了按钮:

for (int i = 1; i < 10; i++) {

        bf[i] = (Button) findViewById(Buttons[i - 1]);
        bf[i].setOnClickListener(this);
    }


好又容易吧?但是然后当我尝试在开关和大小写中引用它们时(在实现的onClickListener方法中,我遇到了问题:

for (int i = 1; i < 10; i++) {
        case Buttons[i-1]:
            Toast.makeText(this, bf[i].getText(), Toast.LENGTH_SHORT).show();
        break;
    }


这不起作用,因此我只尝试了一个参考:

switch (v.getId()) {
    case Buttons[0]:
        Toast.makeText(this, bf[1].getText(), Toast.LENGTH_SHORT).show();
        break;


哪一个也不起作用?!?!请帮助?

最佳答案

v您的视图在onClickListener中是吗?
为什么不使用:

Button b = (Button) v;
Toast.makeText(this, b.getText(), Toast.LENGTH_SHORT).show();


其他一些要点:


您没有发布完整的代码,但是我想您可以将Buttons数组更改为private。
也许您甚至不需要bf []


编辑:另外,我建议使用此for循环在所有按钮之间循环以使其更加灵活:

for (int i : Buttons) {
    Button b = findViewById(i);
    b.setOnClickListener(myClickListener);
}

07-27 13:58