从 android 中动态创建的 edittext 获取值?

Get value from edittext created dynamically in android?

我已经用从服务器收到的 JSON 创建了 UI,

我能够根据收到的数据成功创建输入。 (我必须根据数据创建输入字段)

如何在单击按钮时为每个 editText 调用 getText()?

任何帮助都会有用。

代码: (主要activity)

    <ListView
    android:padding="@dimen/_8sdp"
    android:id="@+id/lv"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center" />

<Button
    android:layout_alignParentBottom="true"
    android:id="@+id/addnew"
    android:textColor="#000000"
    android:text="Save"
    android:onClick="saveData"
    android:layout_width="match_parent"
    android:layout_height="50dp"/>

代码(在适配器中)

    <RelativeLayout
    android:id="@+id/r1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <EditText
        android:layout_margin="@dimen/_8sdp"
        android:paddingStart="@dimen/_16sdp"
        android:paddingEnd="@dimen/_16sdp"
        android:id="@+id/editText"
        android:importantForAutofill="no"
        android:maxLength="35"
        android:textColorHint="#66000000"
        android:textColor="#66000000"
        android:background="@drawable/rounded_edittext"
        android:layout_width="match_parent"
        android:layout_height="50dp"/>


</RelativeLayout>

以上字段是使用Adapter动态生成的, 我需要在单击按钮时获取输入的值。

注意: 按钮在主页上,输入字段来自适配器和 JSON 循环

希望您理解我的担忧。 感谢您的帮助。

我想你想在所有输入字段序列中获取文本,如果是这样,在你的 json 你需要为每个输入字段添加 id,每个输入字段都有一个唯一的 id 例如,对于上面的屏幕截图,我想 json 将是

[
"input_field_1": {
    "id": "ipf_1",
    "hint": "Title",
    "other_data": "..."
},
"input_field_2": {
    "id": "ipf_2",
    "hint": "URL",
    "other_data": "..."
},
"input_field_3": {
    "id": "ipf_3",
    "hint": "Username",
    "other_data": "..."
},
" input_field_4 ": {
    " id ": " ipf_4 ",
    " hint ": " Password ",
    " other_data ": "..."
]

所以代码应该像 (kotlin):

val listValue = ArrayList<String>()
val jsonArray = your_json_array
for (i in 1..jsonArray.length()) {
    listValue.add(findViewById(getResources().getIdentifier(jsonArray[i].id, "id", context.getPackageName()))?.text?.toString())
}

yourButton.setOnClickListener {
    //get value as your requirement
    for (value in listValue) {
        Log.d("TAG", "value is $value")
    }
}

Java代码:

void parseJson() {
    String json = "[\n" +
            "\"input_field_1\": {\n" +
            "    \"id\": \"ipf_1\",\n" +
            "    \"hint\": \"Title\",\n" +
            "    \"other_data\": \"...\"\n" +
            "},\n" +
            "\"input_field_2\": {\n" +
            "    \"id\": \"ipf_2\",\n" +
            "    \"hint\": \"URL\",\n" +
            "    \"other_data\": \"...\"\n" +
            "},\n" +
            "\"input_field_3\": {\n" +
            "    \"id\": \"ipf_3\",\n" +
            "    \"hint\": \"Username\",\n" +
            "    \"other_data\": \"...\"\n" +
            "},\n" +
            "\" input_field_4 \": {\n" +
            "    \" id \": \" ipf_4 \",\n" +
            "    \" hint \": \" Password \",\n" +
            "    \" other_data \": \"...\"\n" +
            "]";

    final ArrayList<String> listValue = new ArrayList<>();
    try {
        JSONArray jsonArray = new JSONArray(json);
        for (int i = 0; i < jsonArray.length(); i++) {
            JSONObject jsonObject = jsonArray.getJSONObject(i);
            String idName = jsonObject.getString("id");
            int id = getResources().getIdentifier(idName, "id", getPackageName());
            listValue.add(((EditText) findViewById(id)).getText().toString());
        }

        findViewById(R.id.yourButtonId).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                for (int i = 0; i < listValue.size(); i++) {
                    Log.d("TAG", "value is: " + listValue.get(i));
                }
            }
        });
    } catch (Exception e) {
        Log.e("TAG", "error is: " + e.getMessage());
    }
}