2012-12-18 61 views
-1

我试图添加附加文本改变监听到我的代码,所以当 我对其进行编辑货币全自动转换到选定的单选按钮(美元,欧元),而不需要推动的一个文本单选按钮,使其在textview中显示答案。Android | AddTextChangedListener与单选按钮

我不知道如何做到这一点 我是新来的节目在谷歌搜索没有找到答案

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

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

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

我还加入了一个建议,上述有关如何返工交换机/箱使用更少的代码重复,因为世界上没有写点同样的事情两次。

+0

还有一个问题,也许它有点新手问这一点,但为什么你的EXCHANGERATE设置为-1而不是0?有什么特别的理由 –

+1

的如果在底部条件查看是否EXCHANGERATE是执行计算之前大于0。通过初始化为-1,您可以确保在未选中复选框的情况下不会进行计算。 – jimmithy