使用具有多个用户输入值的Android TextWatcher并更新这些值

使用具有多个用户输入值的Android TextWatcher并更新这些值,android,user-input,android-textwatcher,Android,User Input,Android Textwatcher,我也是新来的。我尝试开发一个android应用程序来获取用户输入项的总量。这是我的申请简图 用户必须输入第一行Col1和COL2。但第一行Col3可以输入也可以不输入。在Sub 1文本视图中,应显示第一行的总值。此值也应显示在结果文本视图中。同样,若用户将数据插入第二行,则必须在Col1和Col2下输入到。如果用户愿意,可以在第3列下输入值。第二行总值应显示在Sub 2文本视图中。如果用户在第二行输入值,则结果textview应自动更新为Sub 1和Sub 2 textview的总值。我试着这样

我也是新来的。我尝试开发一个android应用程序来获取用户输入项的总量。这是我的申请简图

用户必须输入第一行Col1和COL2。但第一行Col3可以输入也可以不输入。在Sub 1文本视图中,应显示第一行的总值。此值也应显示在结果文本视图中。同样,若用户将数据插入第二行,则必须在Col1和Col2下输入到。如果用户愿意,可以在第3列下输入值。第二行总值应显示在Sub 2文本视图中。如果用户在第二行输入值,则结果textview应自动更新为Sub 1和Sub 2 textview的总值。我试着这样做,但我找不到正确的方法。如果有人帮我解决这个问题,我真的很感激。 这是java类

public class AddTwo extends AppCompatActivity {

    EditText edit1, edit2, edit3;
    EditText edit4, edit5, edit6;
    TextView textViewSub1, textViewSub2, textViewResult;

    /**
     * Called when the activity is first created.
     */
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.activity_add_two);

        /*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);


        /*Second row variables*/
        edit4 = (EditText) findViewById(R.id.editText5);
        edit5 = (EditText) findViewById(R.id.editText6);
        edit6 = (EditText) findViewById(R.id.editText7);
        textViewSub2 = (TextView) findViewById(R.id.TextViewsub2);

        /*Final Total TextView variable*/
        textViewResult = (TextView) findViewById(R.id.textView_result);


        //use TextWatcher for edit1 in First Row Col1
        edit1.addTextChangedListener(new TextWatcher() {

            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                // TODO Auto-generated method stub
            }

            public void onTextChanged(CharSequence s, int start, int before, int count) {
                //textViewResult.setText(addNumbers());
            }

            public void afterTextChanged(Editable s) {
                // TODO Auto-generated method stub
            }
        });

        //use TextWatcher for first First Row Col2
        edit2.addTextChangedListener(new TextWatcher() {

            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
                // TODO Auto-generated method stub
            }

            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            public void afterTextChanged(Editable s) {
                // TODO Auto-generated method stub
                //textViewResult.setText(addNumbers());
            }
        });

        //use TextWatcher for first First Row Col3
        edit3.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
            }

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

    }


    //Define method addString()
    private String addNumbers() {

        //declaring variables
        int number1, number2;
        double num1, num2;
        double d1, d2;
        double da1, da2;

        Double orderTotal1 = null, orderTotal2 = null;
        Double ordTot1 = null, ordTot2 = null;


        DecimalFormat df = new DecimalFormat("0.00##");

        //For First Row
        /*if only the first and second edittext fields in First Row is filled*/
        if ((edit1.getText().toString() != "" && edit1.getText().length() > 0) && (edit2.getText().toString() != "" && edit2.getText().length() > 0)) {

            num1 = Double.parseDouble((edit1.getText().toString()));
            number1 = Integer.parseInt(edit2.getText().toString());
            ordTot1 = num1 * number1;
            textViewSub1.setText(df.format(ordTot1));

         /*else if the first,secondn third (all) edittext fields in First Row is filled*/
        } else if ((edit1.getText().toString() != "" && edit1.getText().length() > 0) && (edit2.getText().toString() != "" && edit2.getText().length() > 0) && (edit3.getText().toString() != "" && edit3.getText().length() > 0)) {

            num1 = Double.parseDouble((edit1.getText().toString()));
            number1 = Integer.parseInt(edit2.getText().toString());
            d1 = Double.parseDouble(edit3.getText().toString());

            da1 = 100 - d1;
            orderTotal1 = ((da1 * number1) * num1) / 100;
            textViewSub1.setText(df.format(orderTotal1));

        } else {
            number1 = (int) 0.00;
            num1 = 0.00;
            da1 = 0.00;
        }

        //For the Second Row
        /*if only the first and second edittext fields in Second Row is filled*/
        if ((edit4.getText().toString() != "" && edit4.getText().length() > 0) && (edit5.getText().toString() != "" && edit5.getText().length() > 0)) {

            num2 = Double.parseDouble((edit4.getText().toString()));
            number2 = Integer.parseInt(edit5.getText().toString());
            ordTot2 = num2 * number2;
            textViewSub2.setText(df.format(ordTot2));

         /*else if the first,secondn third (all) edittext fields in Second Row is filled*/
        } else if ((edit4.getText().toString() != "" && edit4.getText().length() > 0) && (edit5.getText().toString() != "" && edit5.getText().length() > 0) && (edit6.getText().toString() != "" && edit6.getText().length() > 0)) {
            num2 = Double.parseDouble((edit1.getText().toString()));
            number2 = Integer.parseInt(edit2.getText().toString());
            d2 = Double.parseDouble(edit3.getText().toString());

            da2 = 100 - d2;
            orderTotal2 = ((da2 * number2) * num2) / 100;
            textViewSub2.setText(df.format(orderTotal2));

        } else {
            number2 = (int) 0.00;
            num2 = 0.00;
            da2 = 0.00;
        }

       //return statement
        return df.format((orderTotal1) + (orderTotal2));

    }
} 
希望这有帮助

/**
 * Called when the activity is first created.
 */
@Override
public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    setContentView(R.layout.activity_add_two);

    /*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);


    /*Second row variables*/
    edit4 = (EditText) findViewById(R.id.editText5);
    edit5 = (EditText) findViewById(R.id.editText6);
    edit6 = (EditText) findViewById(R.id.editText7);
    textViewSub2 = (TextView) findViewById(R.id.TextViewsub2);

    /*Final Total TextView variable*/
    textViewResult = (TextView) findViewById(R.id.textView_result);


    edit1.addTextChangedListener(new LashCustomTextWatcher());
    edit2.addTextChangedListener(new LashCustomTextWatcher());
    edit3.addTextChangedListener(new LashCustomTextWatcher());
    edit4.addTextChangedListener(new LashCustomTextWatcher());
    edit5.addTextChangedListener(new LashCustomTextWatcher());
    edit6.addTextChangedListener(new LashCustomTextWatcher());
}

public class LashCustomTextWatcher 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) {
        textViewResult.setText(lashCalculate());
    }

    @Override
    public void afterTextChanged(Editable editable) {

    }
}

public String lashCalculate(){
    //declaring variables
    double row1_value = 0;
    double row2_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));
    }

    //calculate second row
    if (!edit4.getText().toString().equals("") && !edit5.getText().toString().equals("")){
        double num4 = Double.parseDouble((edit4.getText().toString()));
        double num5 = Double.parseDouble((edit5.getText().toString()));

        row2_value = num4*num5;

        double num6 = 0;
        if (!edit6.getText().toString().equals("")){
            num6 = Double.parseDouble((edit6.getText().toString()));
            row2_value = (((100 - num6) * num5) * num4)/100;
        }

        textViewSub2.setText(df.format(row2_value));
    }

    return df.format(row1_value + row2_value);
}
希望这有帮助

/**
 * Called when the activity is first created.
 */
@Override
public void onCreate(Bundle icicle) {
    super.onCreate(icicle);
    setContentView(R.layout.activity_add_two);

    /*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);


    /*Second row variables*/
    edit4 = (EditText) findViewById(R.id.editText5);
    edit5 = (EditText) findViewById(R.id.editText6);
    edit6 = (EditText) findViewById(R.id.editText7);
    textViewSub2 = (TextView) findViewById(R.id.TextViewsub2);

    /*Final Total TextView variable*/
    textViewResult = (TextView) findViewById(R.id.textView_result);


    edit1.addTextChangedListener(new LashCustomTextWatcher());
    edit2.addTextChangedListener(new LashCustomTextWatcher());
    edit3.addTextChangedListener(new LashCustomTextWatcher());
    edit4.addTextChangedListener(new LashCustomTextWatcher());
    edit5.addTextChangedListener(new LashCustomTextWatcher());
    edit6.addTextChangedListener(new LashCustomTextWatcher());
}

public class LashCustomTextWatcher 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) {
        textViewResult.setText(lashCalculate());
    }

    @Override
    public void afterTextChanged(Editable editable) {

    }
}

public String lashCalculate(){
    //declaring variables
    double row1_value = 0;
    double row2_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));
    }

    //calculate second row
    if (!edit4.getText().toString().equals("") && !edit5.getText().toString().equals("")){
        double num4 = Double.parseDouble((edit4.getText().toString()));
        double num5 = Double.parseDouble((edit5.getText().toString()));

        row2_value = num4*num5;

        double num6 = 0;
        if (!edit6.getText().toString().equals("")){
            num6 = Double.parseDouble((edit6.getText().toString()));
            row2_value = (((100 - num6) * num5) * num4)/100;
        }

        textViewSub2.setText(df.format(row2_value));
    }

    return df.format(row1_value + row2_value);
}

这是一个文本观察者Metod

....
public EditText edit1 ,edit2 ,edit3;
public void onCreate(Bundle savedInstanceState) {
.....
edit1 = (EditText) findViewById(R.id.editText1);
edit2 = (EditText) findViewById(R.id.editText2);
edit3 = (EditText) findViewById(R.id.editText3);

edit1.addTextChangedListener(textWatcher());
edit2.addTextChangedListener(textWatcher());
edit3.addTextChangedListener(textWatcher());
......

public TextWatcher textWatcher() {

    return new TextWatcher() {

        CountDownTimer timer = null;

        @Override
        public void afterTextChanged(Editable s) {
            //do some thigs
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        //do some thigs
        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
       //do some thigs
        }
    };
}

这是一个文本观察者Metod

....
public EditText edit1 ,edit2 ,edit3;
public void onCreate(Bundle savedInstanceState) {
.....
edit1 = (EditText) findViewById(R.id.editText1);
edit2 = (EditText) findViewById(R.id.editText2);
edit3 = (EditText) findViewById(R.id.editText3);

edit1.addTextChangedListener(textWatcher());
edit2.addTextChangedListener(textWatcher());
edit3.addTextChangedListener(textWatcher());
......

public TextWatcher textWatcher() {

    return new TextWatcher() {

        CountDownTimer timer = null;

        @Override
        public void afterTextChanged(Editable s) {
            //do some thigs
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        //do some thigs
        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
       //do some thigs
        }
    };
}

您在计算方面遇到了问题,还是找到了更好的方法?@TruongHieu,我更改了代码并尝试了一下,但当第一行只填写了第1列和第2列时,我可以得到答案。在那之后它就不起作用了。如果有人能帮助我更好地完成这项任务,我真的很感激。你在计算方面遇到了问题,或者找到了更好的方法?@TruongHieu,我更改了代码并尝试了一下,但当第一行只填写了第1列和第2列时,我就能得到答案。在那之后它就不起作用了。我真的很感谢如果有人能帮助我以更好的方式做这件事@trunghieu,谢谢你,因为你正试图帮助我。但是,当我输入值Sub 1、Sub 2和Result textView字段时,不会使用第一行和第二行@TruongHieu的计算值进行更新,很抱歉,我忘记调用该方法,这就是为什么值不能更新view@Lash你能解决你的问题吗?如果我的答案对你有帮助,请按答案评分并打上标记,如果可以@trunghieu,你救了我:),非常感谢,我接受你的答案,但由于我没有足够的评分,我无法投票支持你的答案。再次感谢@TruongHieu,谢谢你在帮助我。但是,当我输入值Sub 1、Sub 2和Result textView字段时,不会使用第一行和第二行@TruongHieu的计算值进行更新,很抱歉,我忘记调用该方法,这就是为什么值不能更新view@Lash你能解决你的问题吗?如果我的答案对你有帮助,请按答案评分并打上标记,如果可以@trunghieu,你救了我:),非常感谢,我接受你的答案,但由于我没有足够的评分,我无法投票支持你的答案。再次感谢