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

Posted

技术标签:

【中文标题】从android中动态创建的edittext获取价值?【英文标题】:Get value from edittext created dynamically in android? 【发布时间】:2021-01-18 04:48:00 【问题描述】:

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

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

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

任何帮助都会很有用。

代码: (在主要活动中)

    <ListView
    android:padding="@dimen/_8sdp"
    android:id="@+id/lv"
    android:layout_
    android:layout_
    android:gravity="center" />

<Button
    android:layout_alignParentBottom="true"
    android:id="@+id/addnew"
    android:textColor="#000000"
    android:text="Save"
    android:onClick="saveData"
    android:layout_
    android:layout_/>

代码(在适配器中)

    <RelativeLayout
    android:id="@+id/r1"
    android:layout_
    android:layout_>

    <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_
        android:layout_/>


</RelativeLayout>

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

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

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

【问题讨论】:

请提供您在课堂上使用的代码,以便更容易为您提供帮助 已添加,请查看@BogdanAndroid 嗨,我只看到一些 XML,没有看到您的代码。 【参考方案1】:

我想你想在所有输入字段序列中获取文本,如果是这样,在你的 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());
    

【讨论】:

兄弟,有JAVA方面的帮助吗? 好的,我用包含 @Test 的 Java 代码编辑了我的答案

以上是关于从android中动态创建的edittext获取价值?的主要内容,如果未能解决你的问题,请参考以下文章

Android - 通过 ID 从动态 EditTexts 获取数据

如何在android中动态添加edittext?

Android用代码动态创建TextView,EditText,ImageView工具类

Android控件ListView获取item中EditText值

Android控件ListView获取item中EditText值

Android,从edittext中获取文本[重复]