【问题标题】:Android | AddTextChangedListener with radio button安卓 |带单选按钮的 AddTextChangedListener
【发布时间】:2012-12-06 03:02:22
【问题描述】:

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

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

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



}

}

【问题讨论】:

    标签: android radio-button android-edittext converter


    【解决方案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
            }
        }
    

    我还在上面提供了一个关于如何重新设计你的 switch/case 以减少代码重复的建议,因为重复编写相同的东西是没有意义的。

    【讨论】:

    • 再问一个问题可能有点新手问这个问题,但为什么将 ExchangeRate 设置为 -1 而不是 0?有什么特殊原因吗?
    • 底部的 if 条件在执行计算之前查看 exchangeRate 是否大于 0。通过初始化为 -1,您可以确保如果未选中任何复选框,则不会进行计算。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-11
    • 2021-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-18
    • 2019-04-20
    相关资源
    最近更新 更多