2016-03-03 73 views
0

我正在嘗試創建一個簡單的貨幣換算器,並且在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"); 
       } 
      } 
+0

你可以張貼logcat的??? –

+0

將您的代碼設計爲如下所示:首先,當美元edittext處於焦點時,設置偵聽器並在失去焦點時移除偵聽器。爲你的Euro edittext做同樣的事情。 – Srijith

+0

如何收聽焦點丟失或時間選項鍵盤事件。 –

回答

1

檢查編輯文本在各自onTextChanged聽衆關注的焦點。如果編輯文本未聚焦,請在try catch塊之前返回。

+0

讓我知道如果你需要更多的解釋 –

+0

我會這樣做,也使用一個'TextWatcher'這兩個'EditText'使用適當的轉換因子取決於當前集中的'EditText' –

+0

我已經使用了一個If語句和.hasFocus()方法來檢查選擇哪個編輯文本框,並且它全部工作100%。謝謝你們兩位:)如果這不是你想要的,請隨時告訴我,我總是會學習不同的做事方式。 – Demonic217