【问题标题】:Array of ImageButtons, assign R.view.id from a variableImageButtons 数组,从变量中分配 R.view.id
【发布时间】:2010-10-14 19:57:11
【问题描述】:

你好。我的应用程序将使用 64 个 ImageButtons (8x8) 的数组,并且它们都已经在我的 XML 布局中声明,名称如 one1、two5、88 等。我认为不是在我的 Java 中单独声明它们在一些 for 循环中声明它们可能是明智的。我有

ImageButton musicGrid[][] = new ImageButton [8][8];

然后我有我的嵌套 for 循环,它基本上创建了一个将代替 R.id.whatever 的字符串。这只是我循环中的最后一行,应该进行分配。正确的语法是什么,或者这甚至不可能做到(如果是这样,我将如何更好地处理 64 按钮网格?)。谢谢!

for (int i = 0; i < 8; i++) {
        for (int j = 0; j < 8; j++) {
            String btnID = "R.id.";
            switch(i) {
            case 0: btnID.concat("one"); break;
            case 1: btnID.concat("two"); break;
            case 2: btnID.concat("three"); break;
            case 3: btnID.concat("four"); break;
            case 4: btnID.concat("five"); break;
            case 5: btnID.concat("six"); break;
            case 6: btnID.concat("seven"); break;
            case 7: btnID.concat("eight"); break;
            }
            switch(j) {
            case 0: btnID.concat("1"); break;
            case 1: btnID.concat("2"); break;
            case 2: btnID.concat("3"); break;
            case 3: btnID.concat("4"); break;
            case 4: btnID.concat("5"); break;
            case 5: btnID.concat("6"); break;
            case 6: btnID.concat("7"); break;
            case 7: btnID.concat("8"); break;
            }
            musicGrid[i][j] = (ImageButton) findViewById(btnID);
        }
    }

【问题讨论】:

  • 向 XML 文件添加 64 个按钮可能是一种不好的方法。有了这样的布局,为什么不直接在 Java 中创建一个视图并以编程方式完成这一切?

标签: android arrays imagebutton


【解决方案1】:

我喜欢 AndrewKS 的 for,它更优雅。请记住,findViewById 接收的是整数而不是字符串。因此,您必须执行以下操作:

int resID = getResources().getIdentifier(btnID, "drawable", "com.your.package");
musicGrid[i][j] = (ImageButton) findViewById(resID);

【讨论】:

  • 哦,这正是我所需要的。我会让你知道它是否有效。非常感谢。
【解决方案2】:

如果您尚未对 xml 中的按钮进行硬编码,我会说使用 ViewInflater 以编程方式进行,但既然您这样做了,代码如下:

String[] number_as_word = ["one", "two", "three", "four", "five", "six", "seven", "eight"];
for (int i = 0; i < 8; i++) {
  for (int j = 0; j < 8; j++) {
    musicGrid[i][j] = (ImageButton) findViewById("R.id." + number_as_word[i] + (j+1));
  }
}

【讨论】:

  • 这是一种更简洁的方式来做我所拥有的,我喜欢它。但是,我完全忘记提及的实际问题(我的错!)是 findViewByID 说它需要一个整数,而不是字符串。那么如何让 Java 将该字符串评估为 ID?我假设我不能只是施放它。
  • 是的,我忘记了。请参阅克里斯蒂安的回答。
【解决方案3】:

除非有特殊需要将其作为单独的 ImageButtons 执行,否则最好使用 GridView

Here 是使用适配器在 GridView 中使用图像的教程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-19
    • 2016-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    相关资源
    最近更新 更多