【问题标题】:Android: Connecting buttons to the java file through a for loopAndroid:通过for循环将按钮连接到java文件
【发布时间】:2016-03-25 13:36:00
【问题描述】:

我正在尝试为 Android 创建一个国际象棋游戏,并且希望避免在每个按钮的名称都如此相似时声明它们。我尝试使用此 for 循环生成所有 A + Num 按钮。

int RowNum ;
for (RowNum = 1; RowNum < 8; RowNum++) {
    String Position = "A" + RowNum;
    Button Position = (Button)findViewById(R.id.Position);
}

但我有一个错误:变量“位置”已在范围中定义。

如果有人能向我解释执行此操作的最佳方法,我将不胜感激。

提前致谢。

【问题讨论】:

    标签: for-loop button naming-conventions


    【解决方案1】:

    R.Id.A1、R.id.A2 等是identifiers,在 R 类编译期间,它们中的每一个都映射到一个整数。因此,您不能将 'R.id.sth' 作为字符串进行操作,因为它无法正确编译。

    一种解决方法是使用如下代码在资源中动态搜索字符串:

    Button[] buttons=new Button[8]; 
    for(int RowNum=0; RowNum<8; RowNum++) {
       String buttonID = "A"+(RowNum+1); 
       int resID = getResources().getIdentifier(buttonID, "id", getPackageName());
       buttons[RowNum] = ((Button) findViewById(resID));
    }
    

    或者,为了避免动态搜索的时间开销,您可以添加一个资源数组:

    int[] butIds = {R.id.A1, R.id.A2,...};
    
    Button[] buttons= new Button[8]; 
        for(int RowNum=0; RowNum<8, RowNum++) {
           buttons[RowNum]= ((Button) findViewById(butIds[RowNum]));
    }
    

    您甚至可以将资源数组存储为 XML 格式并将其检索为 TypedArray

    【讨论】:

    • 谢谢,我确实尝试了类似的方法,但我无法让它工作,根据你所展示的我已经意识到为什么,我最终只是手动创建了它们,但我可能会回去实施这个。再次感谢!
    【解决方案2】:

    您将String Button 对象都称为Position。给他们不同的名字,例如

    for (int RowNum = 1; RowNum < 8; RowNum++) {
        String currentPosition = "A" + RowNum;
        //Why doesn this not use the Position (now 'currentPosition' variable)?
        Button currentButton = (Button)findViewById(R.id.Position);
    } 
    

    语义上我仍然没有得到那段代码,因为Position 没有在findViewById 的参数中使用,您将静态变量R.id.Position 传递给该参数。

    【讨论】:

    • 我不明白如果 currentButton 的值没有改变,这将如何产生单独的引用,因为这将是他引用的名称?
    • 我要做的就是创建一个名称为 Position 的按钮,并将其链接到 xml 中具有相同名称的按钮,即 I.E.
    • 按钮 A1 = (Button)findViewById(R.id.A1);
    • 但是静态变量R.id.A1的内容是什么?如果是"A1",那么可以通过currentPosition这个函数。在您的循环中,您必须重新生成这些 ID 名称并将其传递给 findViewById(),然后您就可以开始了。并将找到的按钮保存到数组或其他东西以供以后参考。
    • 就是我棋盘左下角的按钮,ID为A1,反正我试试看,谢谢反馈!
    猜你喜欢
    • 2021-12-13
    • 1970-01-01
    • 2021-09-04
    • 2014-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多