Android | AddTextChangedListener带单选按钮

时间:2012-12-18 20:24:10

标签: android radio-button android-edittext converter

我正在尝试将添加文本更改的侦听器添加到我的代码中 我编辑文本,它自动将货币转换为SELECTED RADIO BUTTON(美元,欧元),而无需按下其中一个单选按钮,使其在textview中显示答案。

我不知道该怎么做 我是新的编程搜索谷歌没有找到答案

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:;
            }
        }
    });



}

}

1 个答案:

答案 0 :(得分:1)

我建议你分解你的代码,以便更容易。首先,您需要添加两个侦听器,以便在需要时执行转换。

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();
    }
});

因为你基本上会在两个地方做同样的工作,所以我建议你创建一个为你执行计算的方法。只要您想更新转换,就可以调用它。

   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
        }
    }

我还在上面提到了一个关于如何重新设计你的交换机/案例以减少代码重复的建议,因为没有必要两次写同样的东西。