我正在嘗試創建一個簡單的貨幣換算器,並且在Google貨幣換算器之後對其進行建模,用戶在一個字段中輸入金額並且該應用程序將轉換並顯示金額在相應的領域。使用兩個onTextChanged Listerner(Android)
爲此,我決定使用onTextChanged
聽衆,因爲我希望它隨着用戶輸入金額而更新。
下面是一些代碼片段來繪製更清晰的圖片。
private EditText Dollar,Euro;
private double Result;
private String Amount,Amount2;
Dollar=(EditText)findViewById(R.id.tbDollar);
Euro=(EditText)findViewById(R.id.tbEuro);
Dollar.addTextChangedListener(new TextWatcher()
{
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
try
{
Euro.setText(" ");
Amount=Dollar.getText().toString();
Result=0.92*Double.parseDouble(Amount);
Amount2 = String.format("%.2f", Result);
Euro.setText(Amount2);
}
catch (Exception e)
{
Euro.setText("0.00");
Log.e("Error","Unable to convert a blank Number");
}
}
此代碼工作得很好的權利,直到我加入了相同的代碼歐元場,它增加了應用程序後,當任何一個數字是把它剛剛崩潰。
我懷疑當一個數字插入到美元字段中時,它會計算歐元並將其插入歐元字段,然後觸發歐元的onTextchanged
聽衆,計算美元並將其插入在那裏,創建一個無限循環,然後崩潰應用程序。
我的確認爲解決方案是指定onTextChanged
監聽器只會觸發用戶輸入,但我一直未能找到任何關於該主題的內容。
包括歐元onTextChanged
聽衆的興趣,所有這些代碼是在OnCreate方法中聲明,如果這有所作爲。
謝謝
public void onTextChanged(CharSequence s, int start, int before, int count)
{
try
{
Amount=Euro.getText().toString();
Result=1.09*Double.parseDouble(Amount);
Amount2 = String.format("%.2f", Result);
Dollar.setText(Amount2);
}
catch (Exception e)
{
Dollar.setText("0.00");
Log.e("Error","Unable to convert a blank Number");
}
}
你可以張貼logcat的??? –
將您的代碼設計爲如下所示:首先,當美元edittext處於焦點時,設置偵聽器並在失去焦點時移除偵聽器。爲你的Euro edittext做同樣的事情。 – Srijith
如何收聽焦點丟失或時間選項鍵盤事件。 –