2017-08-20 7 views
-2

私はこのように以下のコードを記述しています。しかし、それは動作しません。質問の終わり...テキストウォッチャーを使用して3つのEditTextの間のマッチングを行う方法は?

詳細がわからないので、私はこの文章を作る必要がありました。十分であり、コードは詳細以上です。だから私はちょうど私の質問をするためにこれを入力しています。それを無視し、以下のコードを見てください。あなた

Javaコードをありがとう:

package com.test.easycount; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.text.Editable; 
import android.text.TextWatcher; 
import android.widget.EditText; 
import android.widget.Toast; 

public class MainActivity extends AppCompatActivity implements TextWatcher { 

    EditText num1, num2, sum; 
    int fnumber, snumber, total; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     num1 = (EditText) findViewById(R.id.num1); 
     num2 = (EditText) findViewById(R.id.num2); 
     sum = (EditText) findViewById(R.id.sum); 

     num1.addTextChangedListener(this); 
     num2.addTextChangedListener(this); 
     sum.addTextChangedListener(this); 

     fnumber = Integer.parseInt(num1.getText().toString()); 
     snumber = Integer.parseInt(num2.getText().toString()); 
     total = Integer.parseInt(sum.getText().toString()); 
    } 

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

     if (num1.getText().toString().length() > 0 && num2.getText().toString().length() > 0) { 

      total = fnumber + snumber; 
      sum.setText(Integer.toString(total)); 

     } else if (num1.getText().toString().length() > 0 && sum.getText().toString().length() > 0) { 

      snumber = total - fnumber; 
      num2.setText(Integer.toString(snumber)); 
     } else if (num2.getText().toString().length() > 0 && sum.getText().toString().length() > 0) { 

      fnumber = total - snumber; 
      num1.setText(Integer.toString(fnumber)); 
     } 
    } 
} 

あなたはFNUMBERを計算する必要が....私はこれを行うために役立つ変数を初期化する

+1

テキストはFNUMBER、snumberと合計を変更した後、再度取得する必要があります。 –

答えて

0

削除とafterTextChanged

@Override 
      public void afterTextChanged(Editable s) { 

     try { 
      fnumber = Integer.parseInt(num1.getText().toString()); 
     } catch (NumberFormatException e) { 
      fnumber = 0; 
      Log.e("numberFormat", e.toString()); 
     } 

     try { 
      snumber = Integer.parseInt(num2.getText().toString()); 
     } catch (NumberFormatException e) { 
      snumber = 0; 
      Log.e("numberFormat", e.toString()); 
     } 

     try { 
      total = Integer.parseInt(sum.getText().toString()); 
     } catch (NumberFormatException e) { 
      total = 0; 
      Log.e("numberFormat", e.toString()); 
     } 

     if (num1.getText().toString().length() > 0 && num2.getText().toString().length() > 0) { 

        total = fnumber + snumber; 
        sum.setText(Integer.toString(total)); 

       } else if (num1.getText().toString().length() > 0 && sum.getText().toString().length() > 0) { 

        snumber = total - fnumber; 
        num2.setText(Integer.toString(snumber)); 
       } else if (num2.getText().toString().length() > 0 && sum.getText().toString().length() > 0) { 

        fnumber = total - snumber; 
        num1.setText(Integer.toString(fnumber)); 
       } 
      } 
+0

いいえ動作しません... EditTextに値を入力中にアプリケーションがクラッシュしました。私は今どうすればいい???他のEditTextの値を割り当てますか?最初の値を入力している間はnullです。どのように検証するのですか?あなたは助けてもらえますか? – jde

+0

@jdeは私の編集された答えのようにキャッチを使用します。 –

0

に貼り付けてください。 、スネーバー、合計テキストウォッチャー:

と仮定:

@Override 
    public void afterTextChanged(Editable s) { 

     if (num1.getText().toString().length() > 0 && num2.getText().toString().length() > 0) { 
      fnumber = Integer.parseInt(num1.getText().toString()); 
      snumber = Integer.parseInt(num2.getText().toString()); 
      total = fnumber + snumber; 
      sum.setText(Integer.toString(total)); 

     } else if (num1.getText().toString().length() > 0 && sum.getText().toString().length() > 0) { 
      fnumber = Integer.parseInt(num1.getText().toString()); 
      total = Integer.parseInt(sum.getText().toString()); 
      snumber = total - fnumber; 
      num2.setText(Integer.toString(snumber)); 

     } else if (num2.getText().toString().length() > 0 && sum.getText().toString().length() > 0) { 
      snumber = Integer.parseInt(num2.getText().toString()); 
      total = Integer.parseInt(sum.getText().toString()); 
      fnumber = total - snumber; 
      num1.setText(Integer.toString(fnumber)); 
     } 
} 

さらに、fnumber、snumber、total initializationをonCreateから削除します。

簡単に計算するためには、それぞれのEditTextのために別々のtextWatcherを使用することをお勧めします:

例:

num1.addTextChangedListener(new 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) { 

      } 
     }); 
+0

2番目の値を入力すると、アプリケーションは終了しました。どうして? – jde

+0

別個のウォッチャーを追加する。計算する方が良い。 –

+0

どうすれば追加できますか?手伝って頂けますか? – jde

関連する問題