【问题标题】:Extracting data from multiple EditTexts without code repetition从多个 EditText 中提取数据而不重复代码
【发布时间】:2020-11-27 14:00:56
【问题描述】:

我想有效地从表单中的 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);

【问题讨论】:

    标签: java forms android-studio


    【解决方案1】:

    不重复代码的一般方法通常是循环和函数。在这种情况下,您应该将 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());
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-25
      • 2022-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多