首页 > 解决方案 > 从多个 EditText 中提取数据而不重复代码

问题描述

我想有效地从表单中的 EditText 字段中提取数据,而不必多次重复相同的代码。这是我当前对四个 EditText 的实现:

    EditText editText1 = (EditText) findViewById(R.id.editText1);
    String message1 = editText1.getText().toString();
    formData.put("data1", message1);

    EditText editText2 = (EditText) findViewById(R.id.editText2);
    String message2 = editText2.getText().toString();
    formData.put("data2", message2);

    EditText editText3 = (EditText) findViewById(R.id.editText3);
    String message3 = editText3.getText().toString();
    formData.put("data3", message3);

    EditText editText4 = (EditText) findViewById(R.id.editText4);
    String message4 = editText4.getText().toString();
    formData.put("data4", message4);

标签: javaformsandroid-studio

解决方案


不重复代码的一般方法通常是循环和函数。在这种情况下,您应该将 EditTexts 添加到类似数据结构的数组中并循环它们。

例如:

您可以将编辑文本存储在哈希映射中,然后使用循环将它们添加到表单中:

new HashMap<EditText, String>() {{
    put(R.id.et1, "name");
    put(R.id.et2, "phone");
    //etc...
}}.forEach((editText, s) -> formData.put(s, editText.getText().toString()));

如果您不介意使用无意义的名称,则可以使用数组:

EditText[] toAdd = new EditText[]{findViewById(R.id.et1), findViewById(R.id.et2)};
for (int i = 0; i < toAdd.length; i++) {
    formData.put("data" + i, toAdd[i].getText().toString());
}

或者对于两者的完美结合,您可以使用 EditText 的 ID 作为名称

EditText[] toAdd = new EditText[]{findViewById(R.id.et1), findViewById(R.id.et2)};
for (EditText editText : toAdd) {
    formData.put(getResources().getResourceEntryName(editText.getId()), editText.getText().toString());
}

推荐阅读