Add Dynamic table rows to table layout in android together with textwatcher

1.3k views Asked by At

I try to Add new Table rows into TableLayout in my android app. I successfully added new table rows with multiple edittexts, by following an android tutorial. Now what I try to do is, I need to get user values for those edittexts using TextWatcher. I searched a lot of tutorials and tried a lot, but i was failed. This is how my app looks like before I add a button to this.

enter image description here

What I need is to Open Second row by clicking a button If user wants, and if user enters values to edittext fields they need to use and , final Result should display accordingly. This is my previous code, I posted with a question and solved it in here . Using Android TextWatcher with multiple user input values and Update thses values

If someone could help me, I highly appreciate your help. Thanks in advance.

Now this is my new XML code

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <Button
        android:id="@+id/Button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentTop="true"
        android:text="Add Line" />


    <ScrollView
        android:id="@+id/scrollView2"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_below="@+id/Button1"
        android:layout_marginTop="97dp">


        <RelativeLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">

            <TableLayout
                android:id="@+id/TableLayout1"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:divider="?android:attr/dividerHorizontal"
                android:showDividers="middle">

                <TableRow
                    android:id="@+id/TableRow1"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content">


                    <EditText
                        android:id="@+id/editText1"
                        android:layout_width="fill_parent"
                        android:layout_height="wrap_content"
                        android:ems="4"
                        android:padding="2dp" />

                    <EditText
                        android:id="@+id/editText2"
                        android:layout_width="fill_parent"
                        android:layout_height="wrap_content"
                        android:ems="4"
                        android:padding="2dp" />

                    <EditText
                        android:id="@+id/editText3"
                        android:layout_width="fill_parent"
                        android:layout_height="wrap_content"
                        android:ems="4"
                        android:padding="2dp" />

                    <TextView
                        android:id="@+id/TextViewsub1"
                        android:layout_width="wrap_content"
                        android:layout_height="match_parent"
                        android:layout_weight="1"
                        android:gravity="center"
                        android:hint="$ 0.00"
                        android:textSize="18dip" />


                </TableRow>

                <TableRow
                    android:id="@+id/TableRow2"
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content">


                    <EditText
                        android:id="@+id/editText4"
                        android:layout_width="fill_parent"
                        android:layout_height="wrap_content"
                        android:ems="4"
                        android:padding="2dp" />

                    <EditText
                        android:id="@+id/editText5"
                        android:layout_width="fill_parent"
                        android:layout_height="wrap_content"
                        android:ems="4"
                        android:padding="2dp" />

                    <EditText
                        android:id="@+id/editText6"
                        android:layout_width="fill_parent"
                        android:layout_height="wrap_content"
                        android:ems="4"
                        android:padding="2dp" />

                    <TextView
                        android:id="@+id/TextViewsub2"
                        android:layout_width="wrap_content"
                        android:layout_height="match_parent"
                        android:layout_weight="1"
                        android:gravity="center"
                        android:hint="$ 0.00"
                        android:textSize="18dip" />

                </TableRow>
            </TableLayout>
        </RelativeLayout>
    </ScrollView>

    <TextView
        android:id="@+id/textView12"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/scrollView2"
        android:layout_alignParentEnd="true"
        android:layout_alignParentRight="true"
        android:layout_marginEnd="87dp"
        android:layout_marginRight="87dp"
        android:hint="Rs: 0.00" />

    <TextView
        android:id="@+id/textView13"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignTop="@+id/textView12"
        android:layout_marginEnd="86dp"
        android:layout_marginRight="86dp"
        android:layout_toLeftOf="@+id/textView12"
        android:layout_toStartOf="@+id/textView12"
        android:text="Total Value" />

</RelativeLayout>

This is now How my Java File looks like

 public class NewClass extends AppCompatActivity implements View.OnClickListener {

        Button btnAdd;
        int counter = 0;

        EditText edit1, edit2, edit3;
        TextView textViewSub1, textViewResult;

        @Override
        protected void onCreate(Bundle savedInstanceState) {

            /*First row variables*/
            edit1 = (EditText) findViewById(R.id.editText1);
            edit2 = (EditText) findViewById(R.id.editText2);
            edit3 = (EditText) findViewById(R.id.editText3);
            textViewSub1 = (TextView) findViewById(R.id.TextViewsub1);

            textViewResult = (TextView) findViewById(R.id.textView12);

            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_new_class);

            //add line button
            btnAdd = (Button) findViewById(R.id.Button1);
            btnAdd.setOnClickListener(this);

            edit1.addTextChangedListener(new LashCustomTextWatcher1());
            edit2.addTextChangedListener(new LashCustomTextWatcher1());
            edit3.addTextChangedListener(new LashCustomTextWatcher1());

        }

        public class LashCustomTextWatcher1 implements TextWatcher {

            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void afterTextChanged(Editable editable) {
                textViewResult.setText(lashCalculate());
            }
        }


        public void onClick(View view) {
            TableLayout tl = (TableLayout) findViewById(R.id.TableLayout1);
            TableRow tr = new TableRow(this);

            //TextView tv = new TextView(this);
            //tv.setText("text ");

            edit1 = new EditText(this);
            //edit1.setText("Hello " + counter++);

            edit2 = new EditText(this);
            //edit2.setText("Item no " + counter++);

            edit3 = new EditText(this);
            //edit3.setText("Qty no " + counter++);

            textViewSub1 = new TextView(this);


            tr.addView(edit1);
            tr.addView(edit2);
            tr.addView(edit3);
            tr.addView(textViewSub1);
            //tr.addView(cb);
            tl.addView(tr, new TableLayout.LayoutParams(TableLayout.LayoutParams.WRAP_CONTENT, TableLayout.LayoutParams.WRAP_CONTENT));
        }


        public String lashCalculate() {

            //declaring variables
            double row1_value = 0;

            DecimalFormat df = new DecimalFormat("0.00");

            //calculate first row
            if (!edit1.getText().toString().equals("") && !edit2.getText().toString().equals("")) {
                double num1 = Double.parseDouble((edit1.getText().toString()));
                double num2 = Double.parseDouble((edit2.getText().toString()));

                row1_value = num1 * num2;

                double num3 = 0;
                if (!edit3.getText().toString().equals("")) {
                    num3 = Double.parseDouble((edit3.getText().toString()));
                    row1_value = (((100 - num3) * num2) * num1) / 100;
                }

                textViewSub1.setText(df.format(row1_value));
            }


            return df.format(row1_value);
    }


    }
1

There are 1 answers

3
Ashish P On

1) First of all in parent layout xml put linearlayot as below:

 <LinearLayout
                android:id="@+id/parent_layout"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:orientation="vertical"></LinearLayout>

2) Than Make a layout that is want to add in every click.

3) You can now add your view in parent like below :

LinearLayout parent_layout = (LinearLayout)findViewById(R.id.parent_layout);
                    for(i=0;i<3;i++)
                    {
                      parentlayout.addView(myViewReview(data.get(i)));
                    }


public View myViewReview() {

        View v; // Creating an instance for View Object
        LayoutInflater inflater = (LayoutInflater) getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = inflater.inflate(R.layout.row_facility_review, null);
        TextView row_reviewer_name = (TextView) v.findViewById(R.id.row_reviewer_name);
        TextView row_review_text = (TextView) v.findViewById(R.id.row_review_text);
        return v;
    }