1

我尝试在我的 android 应用程序中将新表行添加到 TableLayout 中。通过遵循 android 教程,我成功地添加了具有多个编辑文本的新表行。现在我尝试做的是,我需要使用 TextWatcher 获取这些编辑文本的用户值。我搜索了很多教程并尝试了很多,但我失败了。这是我的应用程序在添加按钮之前的样子。

在此处输入图像描述

我需要的是通过单击按钮打开第二行如果用户想要,并且如果用户输入值来编辑他们需要使用的文本字段和,最终结果应该相应地显示。这是我以前的代码,我发布了一个问题并在这里解决了。 使用具有多个用户输入值和更新这些值的 Android TextWatcher

如果有人可以帮助我,我非常感谢您的帮助。提前致谢。

现在这是我的新 XML 代码

<?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>

这就是我的 Java 文件现在的样子

 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);
    }


    }
4

1 回答 1

0

1)首先在父布局xml中放置linearlayot如下:

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

2)比制作一个想要在每次点击中添加的布局。

3)您现在可以在父级中添加您的视图,如下所示:

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;
    }  
于 2017-09-13T12:08:21.700 回答