【问题标题】:Unable to put the Two TextWatcher Listener for two Different EditText?无法为两个不同的 EditText 放置两个 TextWatcher 侦听器?
【发布时间】:2011-10-08 05:22:54
【问题描述】:

我在布局中有两个 EditText 和一个 TextView。我想相对于另一个 EditText 值更改 EditText 和 TextView 的值。另一个editText也一样。我已经实现了如下代码。

 amountText.setText("");
    excludedText.setText("");
    includedText.setText("");


    includedText.addTextChangedListener(new TextWatcher() {

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

                if(!(includedText.getText().toString().equals("")))
                {
                    double included = Double.parseDouble(includedText.getText().toString());
                    included = roundTwoDecimals(included);
        //          double amountValue = (excluded*15/100);

                    String amt = String.valueOf(roundTwoDecimals(included-(included/1.15)));
                    String excluded = String.valueOf(included/1.15);
                    System.out.println("The Amount is: "+amt);
                    amountText.setText(amt);
                    try{
                        excludedText.setText("");
                        excludedText.setText(excluded); //////// Error
                    }
                    catch(Exception e)
                    {
                        e.printStackTrace();
                    }
                }
                else
                {
                    amountText.setText("");
                    //excludedText.setText("");
                }

        }

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

        }

        @Override
        public void afterTextChanged(Editable s) {
            // TODO Auto-generated method stub

        }
    });

    excludedText.addTextChangedListener(new TextWatcher() 
    {

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            if(!(excludedText.getText().toString().equals("")))
            {
                double excluded = Double.parseDouble(excludedText.getText().toString());
                excluded = roundTwoDecimals(excluded);
        //      double amountValue = (excluded*15/100);

                String amt = String.valueOf(roundTwoDecimals(excluded*0.15));
                String included = String.valueOf(roundTwoDecimals(excluded+(excluded*0.15)));
                System.out.println("The Amount is: "+amt);
                amountText.setText(amt);
                includedText.setText(included);
            }
            else
            {
                amountText.setText("");
                includedText.setText("");
            }

        }

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

        }

        @Override
        public void afterTextChanged(Editable s) {
            // TODO Auto-generated method stub

        }
    });

但是当我运行应用程序时,我得到了类似 stackoverflow 的错误。

错误Logcat是:

10-08 10:46:19.149: ERROR/AndroidRuntime(695): FATAL EXCEPTION: main
10-08 10:46:19.149: ERROR/AndroidRuntime(695): java.lang.StackOverflowError
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at android.text.DynamicLayout.reflow(DynamicLayout.java:261)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at android.text.DynamicLayout.<init>(DynamicLayout.java:150)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at android.widget.TextView.makeNewLayout(TextView.java:4851)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at android.widget.TextView.checkForRelayout(TextView.java:5348)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at android.widget.TextView.setText(TextView.java:2688)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at android.widget.TextView.setText(TextView.java:2556)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at android.widget.EditText.setText(EditText.java:75)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at android.widget.TextView.setText(TextView.java:2531)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at com.project.TaxCalculator.GSTActivity$1.onTextChanged(GSTActivity.java:66)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at android.widget.TextView.sendOnTextChanged(TextView.java:6131)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at android.widget.TextView.setText(TextView.java:2691)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at android.widget.TextView.setText(TextView.java:2556)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at android.widget.EditText.setText(EditText.java:75)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at android.widget.TextView.setText(TextView.java:2531)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at com.project.TaxCalculator.GSTActivity$2.onTextChanged(GSTActivity.java:111)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at android.widget.TextView.sendOnTextChanged(TextView.java:6131)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at android.widget.TextView.setText(TextView.java:2691)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at android.widget.TextView.setText(TextView.java:2556)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at android.widget.EditText.setText(EditText.java:75)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at android.widget.TextView.setText(TextView.java:2531)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at com.project.TaxCalculator.GSTActivity$1.onTextChanged(GSTActivity.java:67)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at android.widget.TextView.sendOnTextChanged(TextView.java:6131)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at android.widget.TextView.setText(TextView.java:2691)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at android.widget.TextView.setText(TextView.java:2556)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at android.widget.EditText.setText(EditText.java:75)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at android.widget.TextView.setText(TextView.java:2531)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at com.project.TaxCalculator.GSTActivity$2.onTextChanged(GSTActivity.java:111)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at android.widget.TextView.sendOnTextChanged(TextView.java:6131)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at android.widget.TextView.setText(TextView.java:2691)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at android.widget.TextView.setText(TextView.java:2556)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at android.widget.EditText.setText(EditText.java:75)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at android.widget.TextView.setText(TextView.java:2531)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at com.project.TaxCalculator.GSTActivity$1.onTextChanged(GSTActivity.java:67)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at android.widget.TextView.sendOnTextChanged(TextView.java:6131)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at android.widget.TextView.setText(TextView.java:2691)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at android.widget.TextView.setText(TextView.java:2556)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at android.widget.EditText.setText(EditText.java:75)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at android.widget.TextView.setText(TextView.java:2531)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at com.project.TaxCalculator.GSTActivity$2.onTextChanged(GSTActivity.java:111)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at android.widget.TextView.sendOnTextChanged(TextView.java:6131)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at android.widget.TextView.setText(TextView.java:2691)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at android.widget.TextView.setText(TextView.java:2556)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at android.widget.EditText.setText(EditText.java:75)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at android.widget.TextView.setText(TextView.java:2531)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at com.project.TaxCalculator.GSTActivity$1.onTextChanged(GSTActivity.java:67)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at android.widget.TextView.sendOnTextChanged(TextView.java:6131)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at android.widget.TextView.setText(TextView.java:2691)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at android.widget.TextView.setText(TextView.java:2556)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at android.widget.EditText.setText(EditText.java:75)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at android.widget.TextView.setText(TextView.java:2531)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at com.project.TaxCalculator.GSTActivity$2.onTextChanged(GSTActivity.java:111)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at android.widget.TextView.sendOnTextChanged(TextView.java:6131)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at android.widget.TextView.setText(TextView.java:2691)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at android.widget.TextView.setText(TextView.java:2556)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at android.widget.EditText.setText(EditText.java:75)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at android.widget.TextView.setText(TextView.java:2531)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at com.project.TaxCalculator.GSTActivity$1.onTextChanged(GSTActivity.java:67)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at android.widget.TextView.sendOnTextChanged(TextView.java:6131)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at android.widget.TextView.setText(TextView.java:2691)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at android.widget.TextView.setText(TextView.java:2556)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at android.widget.EditText.setText(EditText.java:75)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at android.widget.TextView.setText(TextView.java:2531)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at com.project.TaxCalculator.GSTActivity$2.onTextChanged(GSTActivity.java:111)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at android.widget.TextView.sendOnTextChanged(TextView.java:6131)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at android.widget.TextView.setText(TextView.java:2691)
10-08 10:46:19.149: ERROR/AndroidRuntime(695):     at android.widget.TextVie

我不知道我错在哪里。 .
请帮助我实施这种方法。 谢谢。

【问题讨论】:

  • GSTActivity 上有什么。第66行???
  • GSTActivity 是我应用的 Activity。

标签: android android-layout android-emulator android-widget


【解决方案1】:

尝试减少执行多种类型的代码

你在做什么

 if(!(includedText.getText().toString().equals("")))
                {
                    double included = Double.parseDouble(includedText.getText().toString());

...

这也可以做到

String stringIncluded=includedText.getText().toString();
if(!(stringIncluded.equals("")))
                    {
                        double included = Double.parseDouble(stringIncluded);

我的意思是尝试删除此类常见的代码,以便执行过程紧凑并可能导致解决您的问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-22
    • 1970-01-01
    • 1970-01-01
    • 2013-03-28
    • 1970-01-01
    相关资源
    最近更新 更多