동일한 코드를 여러 번 반복하지 않고 양식의 EditText 필드에서 데이터를 효율적으로 추출하고 싶습니다. 다음은 4 개의 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());
}