Android 从动态创建的TextInputItemText获取数据并将其插入数组

Android 从动态创建的TextInputItemText获取数据并将其插入数组,android,Android,目前,我已将动态textinputtext字段添加到线性布局中,所有动态添加的字段都存储在该布局中(仅保存动态编辑文本字段)。 但是,当我读取每个EditText字段并获取其数据时,最后一个文本字段的值将替换数组中的所有其他值。 示例: 添加3个动态字段,对应的值为“AA”、“BB”、“CC”。当我读取数组时,它显示如下, 输出:“抄送,抄送,抄送” 代码: private void fetchCertificates(){ ArrayList<String> c

目前,我已将动态
textinputtext
字段添加到线性布局中,所有动态添加的字段都存储在该布局中(仅保存动态编辑文本字段)。
但是,当我读取每个
EditText
字段并获取其数据时,最后一个文本字段的值将替换数组中的所有其他值。

示例:
添加3个动态字段,对应的值为“AA”、“BB”、“CC”。当我读取数组时,它显示如下,

输出:“抄送,抄送,抄送”

代码:

private void fetchCertificates(){

    ArrayList<String> certs = new ArrayList<>();

    for(int i =0;i<linearLayout.getChildCount();i++){

        View certificateView = linearLayout.getChildAt(i);

        TextInputEditText newCerts = findViewById(R.id.new_certs);
        String name = newCerts.getText().toString();
        certs.add(name);
    }

    String certList = android.text.TextUtils.join(",", certs);
    Log.i("Certificates",certs);
}
private void fetchCertificates(){
ArrayList证书=新的ArrayList();

对于(int i=0;i代码中的问题在于这些行

    View certificateView = linearLayout.getChildAt(i);
    TextInputEditText newCerts = findViewById(R.id.new_certs);
假设LinearLayout(父级)只携带TextInputItemText(子级),当您迭代LinearLayout时,您将只获得TextInputItemText,因此您的代码应该如下所示:

    View certificateView = linearLayout.getChildAt(i);
    TextInputEditText newCerts = (TextInputEditText) certificateView;


在您的代码中,由于您直接使用了
findViewById
,因此始终会获得具有此id的最新视图(子视图)(请记住,如果存在具有相同id的多个视图,则将获取在活动或布局中定义的最新视图)这就是你得到抄送、抄送、抄送的原因。

我能够用下面的方法解决它,感谢你对地狱男孩和黑应用的质疑,这让我的想法有点不同

私有证书(){

ArrayList证书=新的ArrayList();

对于(int i=0;i您对孩子们什么都不做
certificateView
.textinputtext newCerts=findViewById(R.id.new_certs),“newCerts”总是包含您的“CC”字符串,需要使用certificateView.getText().toString(),这是我最初的想法,但是当我使用
getText()时
certificateView
上,它显示“无法解析视图中的方法getText”
    TextInputEditText newCerts = (TextInputEditText) linearLayout.getChildAt(i);
ArrayList<String> certs = new ArrayList<>();

for(int i =0;i<linearLayout.getChildCount();i++){

    View certificateView = linearLayout.getChildAt(i);

    TextInputEditText newCerts = certificateView.findViewById(R.id.new_certs);
    String name = newCerts.getText().toString();
    certs.add(name);
}

String certList = android.text.TextUtils.join(",", certs);
Log.i("Certificates",certs);