使用for循环编辑多个按钮的文本

时间:2014-01-26 20:29:59

标签: android android-button

我有16个按钮,其名称为“button1”,“button2”,依此类推。有没有办法可以使用for循环迭代它们,通过以某种方式在每次迭代时附加数值?像这样:

for(int i = 1; i<17; i++ ){
        Button b = (Button)findViewById(R.id.buttoni);

我知道我可以简单地初始化onCreate()方法中的每个按钮,但我只是好奇我是否可以用类似于我的示例代码的方式来完成它。

谢谢。

2 个答案:

答案 0 :(得分:3)

您可以使用getIdentifier

for(int i = 1; i<17; i++ ){        
     int buttonId = getResources().getIdentifier("button"+i, "id", getPackageName());
     Button b = (Button)findViewById(buttonId);
     //Your stuff with the button
}

答案 1 :(得分:1)

您可以创建Button的数组并使用getIdentifier方法,该方法允许您按名称获取标识符。

final int number = 17;
final Button[] buttons = new Button[number];
final Resources resources = getResources();

for (int i = 0; i < number; i++) {
    final String name = "btn" + (i + 1);
    final int id = resources.getIdentifier(name, "id", getPackageName());

    buttons[i] = (Button) findViewById(id);
}

如果有人对如何仅使用Java获得相同结果感兴趣

上述解决方案使用Android个特定方法(例如getResourcesgetIdentifier)并且无法在通常Java中使用,但我们可以使用{{1并编写一个类似于reflection的方法:

getIdentifier

然后:

public static int getIdByName(final String name) {
    try {
        final Field field = R.id.class.getDeclaredField(name);

        field.setAccessible(true);
        return field.getInt(null);
    } catch (Exception ignore) {
        return -1;
    }
}

final Button[] buttons = new Button[17]; for (int i = 0; i < buttons.length; i++) { buttons[i] = (Button) findViewById(getIdByName("btn" + (i + 1))); }

您应重新考虑布局,而不是优化此类代码。如果屏幕上有17个按钮,则ListView可能是更好的解决方案。您可以通过索引访问项目并处理onClick事件,就像使用按钮一样。