我有一个for循环,它通过与我的'Board'类中的imageViews对应的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
完全不同。我假设您给的视图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));
}