java - 使用循环引用不同的editText ID

标签 java android loops while-loop android-edittext

Possible Duplicate:
Looping through editTexts to check values

我有一个包含大约 100 个 editText(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" />

Activity 中:

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;
        }
}

最佳答案

我不知道为什么您决定使用 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("");
    }
}

或者,基于 TableLayout 中的那些 EditText,您可以将对 TableLayout 的引用传递到一个将遍历的方法中使用方法 getChildAt(position)

关于java - 使用循环引用不同的editText ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13508483/

相关文章:

java - 正则表达式匹配问题

java - 在 Android 中使用外部类从文件中写入/读取?

android - Travis CI 构建失败

java - Android ListView 带有来自 URL 的自定义图标

arrays - 如何使用 Template Toolkit 访问数组的元素?

python - 使用 Python mechanize 循环下载文件

Java 将属性和值附加到现有 XML

java - 为什么使用 SwingUtilities.InvokeLater?

r - 使用循环合并和创建表

android - 无法将自动调整 Textview 与支持库一起使用