You need to enable JavaScript to run this app. 如何让提交按钮获取动态创建的EditText控件的输入值
优惠活动
大模型
产品
解决方案
定价
更多

如何让提交按钮获取动态创建的EditText控件的输入值

动态生成EditText的取值方案

你所有动态创建的EditText都存放在arrowSubmissions这个LinearLayout容器中,直接遍历容器子View或者提前用集合存储EditText实例都可以实现取值需求,两种方案的实现代码如下:

方案1:遍历父容器筛选EditText(无需额外存储控件)

直接遍历LinearLayout的所有子View,筛选出EditText类型的控件即可获取所有输入值,适合父容器内只有动态生成的EditText的场景:

// 按钮初始化移到循环外,避免重复查找控件
Button sbmtButton = findViewById(R.id.submit_button);
LinearLayout arrowSubmissions = findViewById(R.id.arrow_submissions);

// 动态创建EditText的逻辑不变
for(int i = 0; i < arrows; i++){
    EditText submission = new EditText(this);
    submission.setHint(String.format("%d", i  + 1));
    arrowSubmissions.addView(submission);
}

// 设置按钮点击事件
sbmtButton.setOnClickListener(v -> {
    List<String> inputValues = new ArrayList<>();
    // 遍历父容器所有子View
    int childCount = arrowSubmissions.getChildCount();
    for (int j = 0; j < childCount; j++) {
        View child = arrowSubmissions.getChildAt(j);
        // 仅处理EditText类型的子View
        if (child instanceof EditText) {
            EditText et = (EditText) child;
            String content = et.getText().toString().trim();
            inputValues.add(content);
        }
    }
    // 此处可添加inputValues的后续处理逻辑
});

方案2:提前用集合存储EditText实例(效率更高)

在类中声明EditText集合,创建控件时直接存入集合,取值时直接遍历集合即可,适合父容器内还有其他类型控件的场景:

// 在Activity/Fragment的成员变量位置声明存储控件的集合
private List<EditText> mEditTextList = new ArrayList<>();

// 初始化逻辑
Button sbmtButton = findViewById(R.id.submit_button);
LinearLayout arrowSubmissions = findViewById(R.id.arrow_submissions);
for(int i = 0; i < arrows; i++){
    EditText submission = new EditText(this);
    submission.setHint(String.format("%d", i  + 1));
    arrowSubmissions.addView(submission);
    // 创建时就将控件存入集合
    mEditTextList.add(submission);
}

// 点击事件直接遍历集合取值
sbmtButton.setOnClickListener(v -> {
    List<String> inputValues = new ArrayList<>();
    for (EditText et : mEditTextList) {
        String content = et.getText().toString().trim();
        inputValues.add(content);
    }
    // 此处可添加inputValues的后续处理逻辑
});

注意事项

  • 不要将按钮的findViewById逻辑写在循环内,重复查找控件会造成不必要的性能损耗,移到循环外执行一次即可
  • 如果需要匹配每个EditText对应的序号,可以在创建控件时调用submission.setTag(i)存储位置标识,取值时通过et.getTag()拿到对应序号
  • 如果需要校验输入内容,可以在遍历的时候添加非空、格式校验逻辑

内容的提问来源于stack exchange,提问作者JustinY97

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 08:57:03