如何根据主微调器选择(在顶部)在 table 中添加特定行数?

How can I add specific number of rows in a table based on the main spinner selection (in top)?

顶部的微调器指定您拥有的家庭成员数量。

如果选择 3,则应同时创建 3 行,其中包含文本字段、数字字段和微调框。

这是我的应用程序的屏幕截图:

activity_main3

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.technet_pc2.myapplication.MainActivity3">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="Family members"
        android:id="@+id/textView12"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true" />

    <TableLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="100dp"
        android:id="@+id/tablelayout1">

        <TableRow
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textAppearance="?android:attr/textAppearanceMedium"
                android:text="Sr No."
                android:id="@+id/textView14"
                android:layout_column="0"
                android:ems="2" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textAppearance="?android:attr/textAppearanceMedium"
                android:text="Name"
                android:id="@+id/textView15"
                android:layout_column="1"
                android:ems="7"/>

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textAppearance="?android:attr/textAppearanceMedium"
                android:text="Age"
                android:id="@+id/textView16"
                android:layout_column="2"
                android:ems="3"/>

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textAppearance="?android:attr/textAppearanceMedium"
                android:text="Sex"
                android:id="@+id/textView17"
                android:layout_column="3"
                android:ems="2"/>

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textAppearance="?android:attr/textAppearanceMedium"
                android:text="Relation"
                android:id="@+id/textView18"
                android:layout_column="4"
                android:ems="4"/>
        </TableRow>

        <TableRow
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textAppearance="?android:attr/textAppearanceMedium"
                android:text="1"
                android:id="@+id/textView19"
                android:layout_column="0" />

            <EditText
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/editText8"
                android:layout_column="1" />

            <EditText
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:inputType="number"
                android:ems="2"
                android:id="@+id/editText9"
                android:layout_column="2" />

            <Spinner
                android:layout_width="1dp"
                android:layout_height="1dp"
                android:id="@+id/spinner3"
                android:layout_column="3" />

            <EditText
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/editText10"
                android:layout_column="4" />
        </TableRow>
    </TableLayout>

    <Spinner
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/spinner4"
        android:layout_below="@+id/textView12"
        android:layout_alignLeft="@+id/textView12"
        android:layout_alignStart="@+id/textView12"
        android:layout_alignRight="@+id/textView12"
        android:layout_alignEnd="@+id/textView12"
        android:spinnerMode="dropdown" />

</RelativeLayout>

MainActivity3.java

public class MainActivity3 extends AppCompatActivity {


    Button b1;
    TableLayout t1;
    Spinner sp;
    ArrayAdapter ad;





    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main3);

        b1=(Button)findViewById(R.id.button);
        sp=(Spinner)findViewById(R.id.spinner4);

     /*  b1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                TableRow row = new TableRow(MainActivity3.this);
                //add Layouts to your new row
                TextView txt = new TextView(MainActivity3.this);
                txt.setText("1");
                row.addView(txt);
                //add your new row to the TableLayout:
                TableLayout t1 = (TableLayout) findViewById(R.id.tablelayout1);
                t1.addView(row);
            }
        });*/

        t1 = (TableLayout)MainActivity3.this.findViewById(R.id.tablelayout1);

        ad=new ArrayAdapter<String>(this,android.R.layout.simple_spinner_dropdown_item);
        ad.add("Select");
        ad.add("1");
        ad.add("2");
        sp.setAdapter(ad);



           if (sp.getSelectedItem().toString().equals("Select")) {

        }
        else if (sp.getSelectedItem().toString().equals("1")) {
            // Inflate your row "template" and fill out the fields.
           TableRow row = (TableRow) LayoutInflater.from(MainActivity3.this).inflate(R.layout.attrib_row, null);
               ((TextView)row.findViewById(R.id.textView19)).getText();
               t1.addView(row);





        }



    }
}

attrib_row.xml

<?xml version="1.0" encoding="utf-8"?>
<TableRow  xmlns:android="http://schemas.android.com/apk/res/android">
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:textAppearance="?android:attr/textAppearanceMedium"
                android:text="1"
                android:id="@+id/textView19"
                android:layout_column="0" />

            <EditText
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/editText8"
                android:layout_column="1" />

            <EditText
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:inputType="number"
                android:ems="2"
                android:id="@+id/editText9"
                android:layout_column="2" />

            <Spinner
                android:layout_width="1dp"
                android:layout_height="1dp"
                android:id="@+id/spinner3"
                android:layout_column="3" />

            <EditText
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:id="@+id/editText10"
                android:layout_column="4" />
</TableRow>

您应该动态添加行,而不是将它们静态地放在布局中。为此,您需要将动态行(具有 EditText 视图的行)提取到另一个 xml 并且在选择器选择条目数后,膨胀正确的行数并将它们添加到table.

我建议您查看 this question 的答案并进行适当的调整。不要忘记为每一行提供唯一的 ID,因为您将收集数据或交替使用 ViewHolder 模式来保存和处理每一行及其数据。

您可以将 recyclerview 与回收站项目一起使用,如下所示:

然后在微调器的 OnitemClickListner 中,您只需更新适配器中的计数或将项目添加到 arraylist<CustomObject>,然后调用 notifyDataSetChanged()

您可以将序列号更新为适配器中的位置+1