java - Android 中的 findViewById 遇到问题

标签 java android imageview

我有一个 for 循环,它通过与我的“Board”类中的 imageView 相对应的 imageView ID 数组运行。代码如下:

for (String s : chunks) {                                                   
    String possibleSquare = "s" + s.substring(2, 4);                        
    ImageView backgroundImg = (ImageView) findViewById(R.id.possibleSquare);
    backgroundImg.setBackgroundColor(Color.rgb(255, 255, 255));   

我在 findViewById 和 possibleSquare 方面遇到错误,特别是 Android 也“无法解析”。

这是 xml:

<TextView
        android:id="@+id/BoardHeading"
        android:text="Chessboard"
        android:layout_width="300dp"
        android:layout_height="30dp"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:textColor="#ff2d3017"
        android:textSize="20dp"
        android:textAlignment="center" />

    <TableLayout
        android:layout_width="360dp"
        android:layout_height="320dp"
        android:layout_below="@id/BoardHeading"
        android:gravity="center_horizontal"
        android:background="#FFFFFF" >

    <TableRow
        android:id="@+id/tableRow1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >

        <ImageView
            android:id="@+id/s00"
            android:tag="black_rook"
            android:layout_width="0dp"
            android:layout_height="40dp"
            android:layout_weight="1"
            android:background="#F3E5AB"
            android:src="@drawable/black_rook"
            />

        <ImageView
            android:id="@+id/s01"
            android:tag="black_knight"
            android:layout_width="0dp"
            android:layout_height="40dp"
            android:background="#AF9B60"
            android:layout_weight="1"
            android:src="@drawable/black_knight"
        />

        <ImageView
            android:id="@+id/s02"
            android:tag="black_bishop"
            android:layout_width="0dp"
            android:layout_height="40dp"
            android:layout_weight="1"
            android:background="#F3E5AB"
            android:src="@drawable/black_bishop"
            />

还有 61 个与上面类似的 imageView。

我收到的 findViewById 的确切错误是:“无法解析方法 findViewById(?)

possibleSquare 变量的错误是“无法解析符号 possibleSquare”。

我做错了什么?

最佳答案

我认为您误解了 Java 中对象的工作原理。 possibleSquare 在语义上与 R.id.possibleSquare 非常不同。我假设您提供的 View ID 类似于 android:id="@+id/sSOMETHING"

for (String s : chunks) {                                                   
    String possibleSquare = "s" + s.substring(2, 4);
    int id = getResources().getIdentifier(possibleSquare, "id", getPackageName());                        
    ImageView backgroundImg = (ImageView) findViewById(id);
    backgroundImg.setBackgroundColor(Color.rgb(255, 255, 255));   
}

请注意,如果您只是想迭代 TableRow,您也可以执行以下操作:

TableRow tableRow = (TableRow)findViewById(R.id.tableRow1);
int childCount  = tableRow.getChildCount();
for (int i = 0; i < childCount; i++){
    ImageView backgroundImg = (ImageView) tableRow.getChildAt(i);
    backgroundImg.setBackgroundColor(Color.rgb(255, 255, 255));   
}

关于java - Android 中的 findViewById 遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28890389/

相关文章:

java - Android Studio newProject卡在gradle项目信息中

java - 我们可以在不运行单独的 ignite 集群的情况下将 Apache ignite 与 spring 应用程序一起使用吗

java - 有没有支持韩语的Java SQL解析器?

java - 如何构建具有自定义一周第一天的区域设置?

java - GridView 前面的绘图 View - Android

ios - 如何在iPhone中获取手指触摸的x和y位置后设置ImageView的位置

java - 通过流转换数组数组

android - 如何在顶点着色器中打印浮点值

JavaFX加载图像内存问题

java - 如何在javaFX中实现多imageView选择按住控制按钮