java - 从多个 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);
解决方案
不重复代码的一般方法通常是循环和函数。在这种情况下,您应该将 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());
}
推荐阅读
- python - 如何将 Lat Lon 坐标的 Pandas DataFrame 转换为矩阵?(Python)
- java - Java 数组声明为 null
- swift - 如何使用 AVFoundation 在 Mac OS swift 中将速度或时间信息发送到 AVAudioUnitMIDIInstrument
- emacs - 如何配置 auto-dim-other-buffers 以使行号列变暗?
- asp.net-core - Host Asp.net Core Web Api locally
- java - 从列表中动态创建 Tablayout 中的选项卡?
- datetime - 雪花 GMT 字符串到日期转换
- c# - EF Core Distinct + OrderBy 引发翻译错误
- python - 获取基于另一列的分组值的百分比pands python
- c# - to当我的方法没有返回值时如何使用out参数