2016-09-14 7 views
2

私はAndroid開発を初めて使いました。私は2つのEditTextを持っており、ET2の値に応じてET1の値を変更しようとしています。EditTextを別のEditTextに変更してください

ET1に56を入力すると、5を入力するとET2には195が表示されます.6を追加すると、ET2には144(200-56)が表示されます。フォーカスはまだET1にある間にすべてが起こるはずです。

scoreWe.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
     @Override 
     public void onFocusChange(View v, boolean hasFocus) { 
      if (v.hasFocus()) { 
       scoreYou.addTextChangedListener(null); 
       scoreWe.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 s) { 
         int scoreW; 
         try { 
          scoreW = Integer.parseInt(scoreWe.getText().toString()); 
         } catch (NumberFormatException e) { 
          scoreW = 0; 
         } 
         int scoreY = 200 - scoreW; 
         String scY = Integer.toString(scoreY); 
         scoreYou.setText(scY); 
        } 
       }); 
      } 
     } 
    }); 

-

scoreYou.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
     @Override 
     public void onFocusChange(View v, boolean hasFocus) { 
      if (v.hasFocus()) { 
       scoreWe.addTextChangedListener(null); 
       scoreYou.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 s) { 
         int scoreY; 
         try { 
          scoreY = Integer.parseInt(scoreYou.getText().toString()); 
         } catch (NumberFormatException e) { 
          scoreY = 0; 
         } 
         int scoreW = 200 - scoreY; 
         String scW = Integer.toString(scoreW); 
         scoreWe.setText(scW); 
        } 
       }); 
      } 
     } 
    }); 

者は2 OnFocusChangeListenersであり、私はEditTextsのいずれかに入力何かしようとした後、アプリがすぐにクラッシュします。 ログ:50:

09-18 16:50:22.362 17764-17764/com.example.dvido.bela E/AndroidRuntime: FATAL EXCEPTION: main 
                    Process: com.example.dvido.bela, PID: 17764 
                    java.lang.NullPointerException: Attempt to invoke interface method 'void android.text.TextWatcher.beforeTextChanged(java.lang.CharSequence, int, int, int)' on a null object reference 
                     at android.widget.TextView.sendBeforeTextChanged(TextView.java:7941) 
                     at android.widget.TextView.setText(TextView.java:4242) 
                     at android.widget.TextView.setText(TextView.java:4199) 
                     at android.widget.EditText.setText(EditText.java:84) 
                     at android.widget.TextView.setText(TextView.java:4174) 
                     at com.example.dvido.bela.InputGame$1$1.afterTextChanged(InputGame.java:89) 
                     at android.widget.TextView.sendAfterTextChanged(TextView.java:8007) 
                     at android.widget.TextView$ChangeWatcher.afterTextChanged(TextView.java:10168) 
                     at android.text.SpannableStringBuilder.sendAfterTextChanged(SpannableStringBuilder.java:1043) 
                     at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:560) 
                     at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:492) 
                     at android.text.SpannableStringBuilder.replace(SpannableStringBuilder.java:491) 
                     at android.text.method.NumberKeyListener.onKeyDown(NumberKeyListener.java:121) 
                     at android.widget.TextView.doKeyDown(TextView.java:6098) 
                     at android.widget.TextView.onKeyDown(TextView.java:5911) 
                     at android.view.KeyEvent.dispatch(KeyEvent.java:2640) 
                     at android.view.View.dispatchKeyEvent(View.java:9234) 
                     at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640) 
                     at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640) 
                     at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640) 
                     at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640) 
                     at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640) 
                     at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640) 
                     at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640) 
                     at com.android.internal.policy.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:2395) 
                     at com.android.internal.policy.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1727) 
                     at android.app.Activity.dispatchKeyEvent(Activity.java:2725) 
                     at android.support.v7.app.AppCompatActivity.dispatchKeyEvent(AppCompatActivity.java:543) 
                     at android.support.v7.view.WindowCallbackWrapper.dispatchKeyEvent(WindowCallbackWrapper.java:53) 
                     at android.support.v7.app.AppCompatDelegateImplBase$AppCompatWindowCallbackBase.dispatchKeyEvent(AppCompatDelegateImplBase.java:312) 
                     at com.android.internal.policy.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:2310) 
                     at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:4127) 
                     at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4089) 
                     at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3642) 
                     at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3695) 
                     at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3661) 
                     at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3787) 
                     at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3669) 
                     at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3844) 
                     at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3642) 
                     at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3695) 
                     at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3661) 
                     at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3669) 
                     at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3642) 
                     at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3695) 
                     at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3661) 
                     at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3820) 
                     at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:3981) 
                     at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:2253) 
                     at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:1874) 

09から18 16 36.917 17764から17764/com.example.dvido.bela I /プロセス:送信信号。 PID:17764 SIG:9

+0

? –

+0

あなたはブロックされていますか?アプリケーションが応答しない?またはクラッシュ? – SripadRaj

答えて

0

リスナーが両方のedittextビューで同時に呼び出されるように変更されたテキストが原因です。

ET2のフォーカスにET1のText changed listener、またはその逆を無効にしてみてください。この

無効にscoreWe textChangedリスナー

scoreYou.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
    @Override 
    public void onFocusChange(View v, boolean hasFocus) { 
     if (v.hasFocus()) { 
      scoreWe.addTextChangedListener(null); // ADD THIS LINE 
      scoreYou.addTextChangedListener(new TextWatcher(){}); // Add and Implement this line also 
      //do rest of your logic 
     } 
    } 
}); 

無効にscoreYou textChangedリスナーのような何かを、あなたのlogcatがあなたのメインスレッド/アプリがブロックされたときに言うん何

scoreWe.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
    @Override 
    public void onFocusChange(View v, boolean hasFocus) { 
     if (v.hasFocus()) { 
      scoreYou.addTextChangedListener(null); // ADD THIS LINE 
      scoreYou.addTextChangedListener(new TextWatcher(){}); // Add and Implement this line also 
      //do rest of your logic 
     } 
    } 
}); 
+0

これは動作していますが、初めての動作です。 ET2にカーソルを移動してからET1に戻すと、リスナーが無効になっているためテキストが変更されないため、再度設定する必要があります。 – Coelacanth

+0

@Celelacanthコードを追加しました。更新された回答を確認してください。他のリスナーをnullに設定した後、リスナーを再度リセットする必要があります。それは仕事をするだろう。試してみてください。 – SripadRaj

+0

私は自分のコードを変更しましたが、何も変わりません。私はそれを上に追加しました。ご協力ありがとうございました。 – Coelacanth

関連する問題