我有一个大约100个editTexts(15行,10列)的布局,所有这些都根据它们的行/列ID命名(例如box0101,box0102等)。
我有一个方法clearBoard(),当单击“清除”按钮时调用该方法(参见下面的代码)。它打算遍历所有框(box0101,box0102,box0103等)并用“”替换内容 - 使它们变成空白。
LogCat中出现的错误表示java.lang.NoSuchFieldException:box0101 在java.lang.Class.getDeclaredField(Class.java:631) - 但是我的xml中肯定有一个box0101,我在代码中多次引用它没有问题。
有什么想法吗?
来自XML
<EditText
android:gravity="center"
android:layout_marginLeft="10dp"
android:id="@+id/box0101"
android:layout_width="30dp"
android:layout_height="30dp"
android:background="@drawable/boxoutlineone" />
<EditText
android:gravity="center"
android:id="@+id/box0201"
android:layout_width="30dp"
android:layout_height="30dp"
android:background="#000000" />
<EditText
android:gravity="center"
android:id="@+id/box0301"
android:layout_width="30dp"
android:layout_height="30dp"
android:background="#000000" />
<EditText
android:gravity="center"
android:id="@+id/box0401"
android:layout_width="30dp"
android:layout_height="30dp"
android:background="#000000" />
活动:
final EditText box0101 = (EditText)findViewById(R.id.box0101);
final EditText box0201 = (EditText)findViewById(R.id.box0201);
final EditText box0301 = (EditText)findViewById(R.id.box0301);
final EditText box0401 = (EditText)findViewById(R.id.box0401);
final EditText box0501 = (EditText)findViewById(R.id.box0501);
等...
public void clearBoard() {
final int ROW_COUNT = 14;
final int COL_COUNT = 9;
final String ROWS[] = {"01","02","03","04","05","06","07","08","09","10","11","12","13","14","15"};
final String COLS[] = {"01","02","03","04","05","06","07","08","09","10"};
for(int i=0; i<ROW_COUNT; i++) {
for(int j=0; j<COL_COUNT; j++) {
String a = ROWS[i];
String b = COLS[j];
int editTextId=getResId("box"+a+b,this,id.class);
EditText et=(EditText)findViewById(editTextId);
et.setText("");
}
}
}
public static int getResId(String variableName, Context context, Class<?> c) {
try {
Field idField = c.getDeclaredField(variableName);
return idField.getInt(idField);
} catch (Exception e) {
e.printStackTrace();
return -1;
}
}
答案 0 :(得分:1)
我不知道为什么你决定使用Field
类来获取id
而不是更实用的Resources.getIdetifier
方法:
for(int i=0; i<ROW_COUNT; i++) {
for(int j=0; j<COL_COUNT; j++) {
String a = ROWS[i];
String b = COLS[j];
int editTextId = getResources().getIdentifier("box" + a + b , "id", getPackageName());
EditText et=(EditText)findViewById(editTextId);
et.setText("");
}
}
或者,基于EditText
中的TableLayout
,您可以将TableLayout
的引用传递给方法,该方法将使用方法getChildAt(position)
遍历它