0

내 응용 프로그램에는 두 개의 EditText와 하나의 TextView가 있습니다. 두 EditText에서 두 Textwatcher를 설정했습니다. 해당 EditText의 Value에 따라 다른 EditText의 Value가 변경되며 textView에도 적용됩니다. 모두 훌륭합니다. 하지만 그 EditText를 다른 EditText에두면 그 값이 다른 EditText를 기반으로 변경되는 것이므로 stackOverflow Error가 발생합니다. 내가 어디 있는지 모르겠다. 그리고 두 EditText가 서로에 대해 값을 변경하기 위해 TextWatcher를 둘 수는 없습니다.서로 다른 값을 변경하는 두 개의 다른 편집 텍스트에 대해 두 개의 TextWatcher를 하나의 활동에 넣을 수없는 이유는 무엇입니까?

제발 도와주세요. 감사합니다. . 코드 :

여기
amountText.setText(""); // TextView 
    excludedText.setText(""); // EditText 
    includedText.setText(""); // EditText 


    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 Line 
        } 
        catch(Exception e) 
        { 
         e.printStackTrace(); 
        } 
       } 
       else 
       { 
        amountText.setText(""); 
        excludedText.setText(""); // Error line 
       } 

     } 

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

       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 

     } 
    }); 

내 로그 캣은 다음과 같습니다

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

이 로그 캣을 참조하고 내가 그것을 해결하기 위해 도와주세요. 감사합니다. .

+0

무한 루프가있는 코드 메쉬 – ingsaurabh

+0

위 코드와 같이 구현하고 싶다면 해결 방법은 무엇입니까 ?? –

+0

나는 지금 당장 clealrly를 기억하지 않고 있지만 Google 검색을 통해 BTW는 afterTextChanged에 else 블록 코드를 넣으려고합니다. – ingsaurabh

답변

2

이것은 무한 루프로가는 stackoverflow의 문제입니다.

두 번째 편집 문구와 두 번째 편집문 텍스트의 값을 업데이트하고 있습니다. 예 :: 들어

당신이 두 번째 편집 텍스트 및 초 텍스트를 편집에서 그 시간에 텍스트를 설정합니다 첫번째 편집 텍스트 문자를 입력 할 때 당신이 그렇게 첫번째 텍스트를 편집의 텍스트를 설정하는 코드를 작성해야 당신은 무한 루프로 갈 것입니다.

편집

et1 = (EditText)findViewById(R.id.et1); 
et2 = (EditText)findViewById(R.id.et2); 

OnKeyListener onKeyListener = new OnKeyListener() { 

      @Override 
      public boolean onKey(View v, int keyCode, KeyEvent event) { 
       String str = ((EditText)v).getText().toString(); 
       if(v == et1) { 
        et2.setText(str); 
       }else { 
        et1.setText(str); 
       } 
       return false; 
      } 
     }; 
     et1.setOnKeyListener(onKeyListener); 
     et2.setOnKeyListener(onKeyListener); 
+0

답장을 보내 주셔서 감사합니다. 당신이 옳은 것 같다. 하지만 나는 그런 것을 구현해야만한다. 그럼 어느 것이 가장 좋은 방법입니까? 그리고 두 EditText 모두에서 수행되는 계산은 서로에 대해 동일합니다. –

+0

onKeyListener가 도움이 될 수도 있습니다 – Dharmendra

+0

좋습니다. 확인해 보겠습니다. 답장을 보내 주셔서 감사합니다. –

1

당신은 "afterTextChanged"에 코드를 넣어 시도 할 수 있지만, 나는 그것이 같은 무한 루프가 발생합니다 생각합니다. 그렇기 때문에 두 입력이 서로 어떻게 의존 할 수 있는지 이해하지 못합니다. 즉, EditText-A가 ET-B의 텍스트를 변경하면 ET-B가 ET-A의 텍스트를 어떻게 다시 변경할 수 있습니까? 어떤 의미.

+0

답장을 보내 주셔서 감사합니다. –

1

EditText에서 텍스트가 변경 될 때마다 TextWatcher가 호출됩니다 (정의 된 경우 구현 한 재정의 된 메소드에 따라 다름). 그래서 당신이 원하는 것을 기반으로, EditText A의 텍스트가 편집되면 TextWatcher가 호출되어 EditText B의 텍스트를 편집 한 다음 EditText A의 텍스트를 편집하는 해당 TextWatcher를 호출합니다 ... 짧게 말해서 나쁜 습관입니다.

+0

답장을 보내 주셔서 감사합니다. –