1

私はAndroidで簡単なアプリを書いています。

この問題が発生しました。2つのEditTextと1つのボタンがあります。1つのEditTextの値は、他の1つのEditTextの倍数である必要があります。

ユーザーが最初のEditTextに値を挿入してからボタンを押すと、他のEditTextにはユーザー入力で計算された値が表示されます。これは他の節でも可能であるはずです。

単純な単位変換のように。EditText1に挿入value1して変換を押すと、アプリは変換された値をEditText2に表示する必要がありますが、EditText2に挿入してvalue2変換ボタンを押すと、アプリは変換された値をEditText1に表示する必要があります。私の問題は、最後のユーザー入力がどのEditTextにあるかをどのように認識できるかということです。

public void convert(View view) {
    EditText textInEuro = (EditText) findViewById(R.id.euroNumber);
    EditText textInDollar = (EditText) findViewById(R.id.dollarNumber);
    if (toDollar) {
        String valueInEuro = textInEuro.getText().toString();
        float numberInEuro = Float.parseFloat(valueInEuro);
        // Here the conversione between the two currents
        float convertedToDollar = unit * numberInEuro;
        // set the relative value in dollars
        textInDollar.setText(Float.toString(convertedToDollar));
    }

    if (toEuro) {
        String valueInDollar = textInDollar.getText().toString();
        float numberInDollar = Float.parseFloat(valueInDollar);
        //Here the conversione between the two currents
        float convertedToEuro = numberInDollar / unit;
        //set the relative value in dollars
        textInEuro.setText(Float.toString(convertedToEuro));
    }
}

これは書かれたコードです。OnClickListenerを使用することを考えましたが、それは良い考えではありません。

4

2 に答える 2

5

2つのEditTextにTextWatcherを追加して、どちらが最後に更新されたかを知ることができます。

public class MainActivity extends Activity {

EditText dollar;
EditText euro;

private static final int EURO = 0;
private static final int DOLLAR = 1;

private int lastUpdated = DOLLAR;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    dollar = findViewById(R.id.dollar);
    euro = findViewById(R.id.euro);

    dollar.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            lastUpdated = DOLLAR;

        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });

    euro.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            lastUpdated = EURO;

        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });

}

public void convert(View view) {
    switch (lastUpdated) {
    case EURO:
        //Do work for euro to dollar
        break;
    case DOLLAR:
        //Do work for dollar to euro
        break;
    default:
        break;
    }
}
}
于 2012-09-20T12:47:08.100 に答える
0

私は別の方法を考えています、あなたはあなたが望むものを達成するためにこれを試すことができます:

  • ユーザーが最初にアクティビティを開始したら、編集テキストフィールドを編集します(1つは入力中、もう1つはボタンを押すまで無効になります)
  • 彼にボタンをクリックさせます
  • 結果が入力され、彼がエディットテキストの1つを編集したい場合、他のエディットテキストは自動的に空になります

editText_1とeditText_2があり、ボタンがbutton_1であるとします。また、convertBooleanというブール変数を取得し、デフォルトとしてfalseにします。

今、

editText_1.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {               
             if(convertBoolean==false){
                editText_2.setEnabled(false); //disable other edittext when one is being edited                    
            }
        }
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after){            
        }
        @Override
        public void afterTextChanged(Editable s) {
            String s1=editText_1.getText().toString().trim();
            String s2=editText_2.getText().toString().trim();
            if(!s1.equals("") && !s2.equals("") && convertBoolean==true){
                //of both are filled, empty second edittext                    
                editText_2.setText("");
                convertBoolean=false;
            }    
            if(editText_1.getText().toString().trim().equals("") && convertBoolean==false){
                editText_2.setEnabled(true);
            }             
        }
    });
editText_2.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {                
             if(convertBoolean==false){
                editText_1.setEnabled(false); //disable other edittext when one is being edited                    
            }
        }
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after){            
        }
        @Override
        public void afterTextChanged(Editable s) {
            String s1=editText_1.getText().toString().trim();
            String s2=editText_2.getText().toString().trim();
            if(!s1.equals("") && !s2.equals("") && convertBoolean==true){
                //of both are filled, empty first edittext                    
                editText_1.setText("");
                convertBoolean=false;
            } 
            if(editText_2.getText().toString().trim().equals("") && convertBoolean==false){
                editText_1.setEnabled(true);
            } 
        }
    });
button_1.setOnClickListener(new OnClickListener(){
        public void onClick(){
            convertBoolean=true;
            editText_1.setEnabled(true);
            editText_2.setEnabled(true);
        }
});
于 2012-09-20T13:12:15.757 に答える