-1

テキスト変更リスナーをコードに追加しようとしているので、テキストを編集すると、ラジオボタンの1つを押して表示する必要なしに、通貨が自動的に選択されたラジオボタン(ドル、ユーロ)に変換されます。テキストビューで答えます。

私はこれを行う方法がわかりません私はグーグルで検索されたプログラミングに不慣れです答えが見つかりませんでした

package com.gardana.superh;

public class ConvertActivity extends Activity {
TextView mResult;
EditText mToConvert;
RadioGroup mRadioGroup;
RadioButton mDollar, Meuro;





protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_convert);

    mResult = (TextView) findViewById(R.id.result);
    mToConvert = (EditText) findViewById(R.id.toConvert);
    mRadioGroup = (RadioGroup) findViewById(R.id.radioG);
    mDollar = (RadioButton) findViewById(R.id.dollar);
    Meuro = (RadioButton) findViewById(R.id.euro);


    mRadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener()
    {
        public void onCheckedChanged(RadioGroup mradRadioGroup, int checkedId)
        {

            switch (checkedId)
            {

            case R.id.dollar:
            Double dollarConvert = Double.valueOf(mToConvert.getText().toString()); //convert the string to int
            double price = dollarConvert * 3.76;
            mDollar.setChecked(true);
            Meuro.setChecked(false);
            mResult.setText("$"+price);

            break;

            case R.id.euro:

                Double euroConvert = Double.valueOf(mToConvert.getText().toString()); //convert the string to int
                double value = euroConvert * 5;
                mDollar.setChecked(false);
                Meuro.setChecked(true);

                mResult.setText("€" + value);
                Meuro.setChecked(false);

                break;

                default:;
            }
        }
    });



}

}

4

1 に答える 1

1

コードを分解して、実行しやすくすることをお勧めします。まず、2つのリスナーを追加して、必要なときに変換が実行されるようにする必要があります。

mToConvert.addTextChangedListener(new TextWatcher() {

    @Override
    public void afterTextChanged(Editable s) {
        convertCurrentAmount();
    }

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

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


});
mRadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
    public void onCheckedChanged(RadioGroup mradRadioGroup, int checkedId)
    {
        convertCurrentAmount();
    }
});

基本的に2つの場所で同じ作業を行うため、計算を実行するメソッドを作成することをお勧めします。これは、変換を更新したいときにいつでも呼び出すことができます。

   public void convertCurrentAmount() {
        int exchangeRate = -1;
        String exchangeSymbol;
        switch (mRadioGroup.getCheckedRadioButtonId()) {
            case R.id.dollar:
                exchangeRate = 3.76;
                exchangeSymbol = "$";
                break;

            case R.id.euro:
                exchangeRate = 5;
                exchangeSymbol = "€";
                break;
        }

        if (exchangeRate > 0 && exchangeSymbol != null) {
            // Perform Calculation
        }
    }

同じことを2回書く意味がないため、スイッチ/ケースを作り直してコードの重複を減らす方法についての提案も上記に含めました。

于 2012-12-18T21:23:14.047 に答える