收集并单独显示秒 activity 中动态 editTexts 的值

Collect and display separately the values of dynamic editTexts in second activity

我创建了三个编辑文本输入和另一组输入,当您单击“添加更多”按钮时应动态添加这些输入。

我想收集第二次提交的数据activity,并根据添加更多按钮被点击的次数将它们分开

我的问题是,当我点击“提交”按钮时,我可以在第二个 activity 中获取静态编辑文本字段的初始值,但无法获取动态编辑文本的值。

如有任何帮助,我将不胜感激 谢谢

XML布局

<ScrollView
    android:layout_width="match_parent"
    android:layout_height="480dp"
    android:paddingBottom="50dp">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="422dp"
        android:layout_margin="5dp"
        android:orientation="vertical">

        <LinearLayout
            android:id="@+id/parent_linear_layout"
            xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <EditText
                android:id="@+id/title_main"
                android:layout_width="match_parent"
                android:layout_height="46dp"
                android:layout_marginStart="16dp"
                android:layout_marginLeft="16dp"
                android:layout_marginTop="52dp"
                android:layout_marginEnd="16dp"
                android:layout_marginRight="16dp"
                android:ems="10"
                android:hint="Enter product Title"
                android:inputType="text"
                android:paddingStart="20dp"
                android:paddingLeft="20dp"
                android:paddingTop="10dp"
                android:paddingEnd="10dp"
                android:paddingRight="10dp"
                android:paddingBottom="10dp"
                android:textSize="14sp" />

            <EditText
                android:id="@+id/product_name_main"
                android:layout_width="match_parent"
                android:layout_height="55dp"
                android:layout_marginStart="16dp"
                android:layout_marginLeft="16dp"
                android:layout_marginTop="24dp"
                android:layout_marginEnd="16dp"
                android:layout_marginRight="16dp"
                android:ems="10"
                android:hint="Product Name"
                android:inputType="text"
                android:paddingStart="20dp"
                android:paddingLeft="20dp"
                android:paddingTop="10dp"
                android:paddingEnd="10dp"
                android:paddingRight="10dp"
                android:paddingBottom="10dp"
                android:textSize="14sp" />

            <EditText
                android:id="@+id/product_number_main"
                android:layout_width="match_parent"
                android:layout_height="55dp"
                android:layout_marginStart="16dp"
                android:layout_marginLeft="16dp"
                android:layout_marginTop="24dp"
                android:layout_marginEnd="16dp"
                android:layout_marginRight="16dp"
                android:ems="10"
                android:hint="Product Number"
                android:inputType="number"
                android:paddingStart="20dp"
                android:paddingLeft="20dp"
                android:paddingTop="10dp"
                android:paddingEnd="10dp"
                android:paddingRight="10dp"
                android:paddingBottom="10dp"
                android:textSize="14sp" />


            <Button
                android:id="@+id/add_field_button"
                android:layout_width="100dp"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:layout_marginLeft="5dp"
                android:layout_marginRight="5dp"
                android:layout_marginBottom="5dp"
                android:background="#555"
                android:onClick="onAddField"
                android:paddingLeft="5dp"
                android:text="Add Field"
                android:textColor="#FFF" />
        </LinearLayout>


    </LinearLayout>

</ScrollView>

<Button
                android:id="@+id/add_field_button"
                android:layout_width="100dp"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:layout_marginLeft="5dp"
                android:layout_marginRight="5dp"
                android:layout_marginBottom="5dp"
                android:background="#555"
                android:onClick="onAddField"
                android:paddingLeft="5dp"
                android:text="Add Field"
                android:textColor="#FFF" />
        </LinearLayout>

动态布局

android:layout_height="50dp"
android:id="@+id/dynamic_layout"
android:orientation="vertical" >

<TextView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:text="New Field"
    android:layout_marginTop="32dp"
    android:textAlignment="center"
    android:textStyle="bold"
    android:textSize="26dp"/>

<EditText
    android:layout_width="match_parent"
    android:layout_height="46dp"
    android:layout_marginStart="16dp"
    android:layout_marginLeft="16dp"
    android:layout_marginTop="22dp"
    android:layout_marginEnd="16dp"
    android:layout_marginRight="16dp"

    android:ems="10"
    android:hint="Enter product Title"
    android:inputType="text"
    android:paddingStart="20dp"
    android:paddingLeft="20dp"
    android:paddingTop="10dp"
    android:paddingEnd="10dp"
    android:paddingRight="10dp"
    android:paddingBottom="10dp"
    android:textSize="14sp"
    />

<EditText
    android:layout_width="match_parent"
    android:layout_height="55dp"
    android:layout_marginStart="16dp"
    android:layout_marginLeft="16dp"
    android:layout_marginTop="24dp"
    android:layout_marginEnd="16dp"
    android:layout_marginRight="16dp"

    android:ems="10"
    android:hint="Product Name"
    android:inputType="text"
    android:paddingStart="20dp"
    android:paddingLeft="20dp"
    android:paddingTop="10dp"
    android:paddingEnd="10dp"
    android:paddingRight="10dp"
    android:paddingBottom="10dp"
    android:textSize="14sp"
    />

<EditText
    android:layout_width="match_parent"
    android:layout_height="55dp"
    android:layout_marginStart="16dp"
    android:layout_marginLeft="16dp"
    android:layout_marginTop="24dp"
    android:layout_marginEnd="16dp"
    android:layout_marginRight="16dp"

    android:ems="10"
    android:hint="Product Number"
    android:inputType="number"
    android:paddingStart="20dp"
    android:paddingLeft="20dp"
    android:paddingTop="10dp"
    android:paddingEnd="10dp"
    android:paddingRight="10dp"
    android:paddingBottom="10dp"
    android:textSize="14sp"
    />


<Button
    android:id="@+id/delete_button"
    android:layout_width="36dp"
    android:layout_height="31dp"
    android:layout_marginStart="10dp"
    android:layout_marginLeft="10dp"
    android:background="@android:drawable/ic_delete"
    android:onClick="onDelete" />

Activity.java 添加更多按钮

public void onAddField(View v) {
    dynamicEditTexts = new ArrayList<EditText>();//added this

    LayoutInflater inflater = (LayoutInflater) 
    getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    final View rowView = inflater.inflate(R.layout.field, null);
    // Add the new row before the add field button.
    parentLinearLayout.addView(rowView, parentLinearLayout.getChildCount() 
- 1);

    EditText dynamicText = new EditText(this);//added this
   // EditText dynamicText = rowView.findViewById(R.id.dynamic_layout);
    dynamicEditTexts.add(dynamicText);

}

提交按钮

public void getValue(View view) {
    Intent intent = new Intent(MainActivity.this, Output.class);
    titleM = findViewById(R.id.title_main);
    productNameM = findViewById(R.id.product_name_main);
    productNumberM = findViewById(R.id.product_number_main);

    //getting the texts
    String Title = titleM.getText().toString();
    String PName = productNameM.getText().toString();
    double PNumber = 
    Double.parseDouble(productNumberM.getText().toString());

    // ******** FOR THE DYNAMIC EDITEXT FIELDS ************
    String[] inputItems = new String[dynamicEditTexts.size()];
    String string = String.valueOf(dynamicEditTexts.size());
    for(int j = 0; j <dynamicEditTexts.size(); j++){
        inputItems[j] = dynamicEditTexts.get(j).getText().toString();
        intent.putExtra("dynamicData", inputItems[j]);
  }

    intent.putExtra("title", Title);
    intent.putExtra("pname", PName);
    intent.putExtra("pnumber", PNumber);
    startActivity(intent);
    finish();
    }

Output.class

//GETTING ITEMS FROM THE MAIN ACTIVITY
    //for the static texts
    String StaticProductTitle = 
    getIntent().getExtras().getString("title");
    String StaticProductName = getIntent().getExtras().getString("pname");
    double StaticProductNumber = 
    getIntent().getExtras().getDouble("pnumber");

    //getting for the dynamic results
    Intent collectDynamicData = getIntent();

    ArrayList<String>alldynamicTexts = (ArrayList<String>) 
    collectDynamicData.getSerializableExtra("dynamicData");




        //FORMATING THE NUMBERS TO DISPLAY IN A NUMBER PATTERN
        DecimalFormat formate = new DecimalFormat();//"#,###,###"
        String FormateStaticNumber;
        String FormateDynamicNumber;
        FormateStaticNumber = formate.format(StaticProductNumber);
        FormateDynamicNumber = formate.format(alldynamicTexts);

        //Setting the Results to the Static OutPut
        StaticTitle.setText(StaticProductTitle);
        StaticPName.setText(StaticProductName);
        StaticPNumber.setText(FormateStaticNumber);

        //Setting the Result of The Dynamic Outputs
        DynamicPTitle.setText(FormateDynamicNumber);
        //DynamicPTitle.setText((CharSequence) alldynamicTexts);
        //DynamicPTitle.setText(array);
        //DynamicPName.setText(DynamicProductName);
        //DynamicPNumber.setText(FormateDynamicNumber);

}

输出更新

Intent collectDynamicData = getIntent();
    String[] dynamicItems = collectDynamicData.getStringArrayExtra("dynamicData");
    ArrayList<String> alldynamicTexts = new ArrayList<>(Arrays.asList(dynamicItems));
    String newText = (String.valueOf(alldynamicTexts));
    DynamicPTitle.setText(newText);

getValue 方法中收集动态 edittext 字段值时,您将覆盖之前放入 intent extras 中的值。

你需要做的是收集列表、数组或类似数据结构中的所有字符串,并将它们一次放入extras。因此,要实现这一点,您应该重写 for 逻辑,如下所示:

for (int j = 0; j <dynamicEditTexts.size(); j++) {
    inputItems[j] = dynamicEditTexts.get(j).getText().toString();
}
intent.putExtra("dynamicData", inputItems);

由于您将数据作为字符串数组注入,因此您还必须将其作为字符串数组读回,因此您的 Output.java 看起来像:

String[] dynamicItems = collectDynamicData.getStringArrayExtra("dynamicData");

并将其转换为字符串列表:

ArrayList<String> alldynamicTexts = new ArrayList<>(Arrays.asList(dynamicItems));

当然你可以首先将它们作为字符串数组列表注入,然后使用collectDynamicData.getStringArrayListExtra("dynamicData")读取它们,选择适合你的任何方法。

希望对您有所帮助。