在Android中遇到findViewById问题

时间:2015-03-06 00:27:49

标签: java android imageview

我有一个for循环,它运行一个imageView ID数组,对应于我'Board'类中的imageViews。代码如下:

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个与上面相似的imageViews。

我为findViewById得到的确切错误是:'无法解析方法findViewById(?)

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

我做错了什么?

2 个答案:

答案 0 :(得分:1)

我认为你误解了对象在Java中是如何工作的。 possibleSquare在语义上与R.id.possibleSquare完全不同。我假设您已经提供了类似android:id="@+id/sSOMETHING"

的观看ID
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));   
}

答案 1 :(得分:0)

你不能这样做,因为R.id.possibleSquare本质上是一个变量名。它不是可用于替换内容的字符串

您可能需要查看此方法

int resID = context.getResources().getIdentifier(possibleSquare, "id", PACKAGENAME);

它会尝试将字符串与资源ID匹配。我用它来构造一个drawable的ResID。从未将它用于身份证,但它可能适合您