2016-07-07 60 views
0

我正在做一個轉換器應用程序,將盧比轉換爲美元,反之亦然,我想只使用兩個編輯文本,我希望它的工作,因爲當我在編輯文本中輸入一個值意味着對於盧比,它應該同時顯示在美元的編輯文本中的轉換值,更確切地說,我希望如果我想將120盧比轉換爲美元,因爲我開始輸入120,因爲1它應該同時顯示轉換後的值美元編輯文本,其次是12,然後最後120轉換器應用程序使用兩個編輯文本

我tried-

if(editText.isFocusable()==true){ 

      editText.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) { 

        str=editText.getText().toString(); 
        rs = Double.parseDouble(str); 
        rstodol = rs/65; 
        str1 = Double.toString(rstodol); 
        editText1.setText(str1); 
       } 

       @Override 
       public void afterTextChanged(Editable s) { 

       } 
      }); 


     } 


     else if(editText1.isFocusable()==true){ 

      editText1.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) { 

        str=editText1.getText().toString(); 
        dol=Double.parseDouble(str); 
        doltors=dol*65; 
        str2=Double.toString(doltors); 
        editText.setText(str2); 
       } 

       @Override 
       public void afterTextChanged(Editable s) { 

       } 
      }); 
     } 

我在哪裏錯了?

+0

看一看的AsyncTask https://developer.android.com/reference/android/os/AsyncTask.html – COYG

+0

@COYG的AsyncTask不合適在這裏,他的計算很短,可以與聽衆一起完成。 – bradkratky

+0

@bradkratky很好! – COYG

回答

0

聽衆應該被添加一次,然後他們執行他們的任務,直到他們被刪除。由於外部的if區塊,您只能添加一個聽衆。相反,你要檢查,如果當前選擇的EditText是hasFocus()

editText = (EditText)findViewById(R.id.edittext); 
editText1 = (EditText)findViewById(R.id.edittext1); 

editText.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) { 

     if(editText.hasFocus()) { 
      try { 
       String str = editText.getText().toString(); 
       double rs = Double.parseDouble(str); 
       double rstodol = rs/65; 
       String str1 = Double.toString(rstodol); 
       editText1.setText(str1); 
      }catch(NumberFormatException e){ 
       // invalid string entered 
       editText1.setText(""); 
      } 
     } 
     } 

     @Override 
     public void afterTextChanged(Editable s) { 

     } 
    }); 


editText1.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) { 
     if(editText1.hasFocus()) { 
      try { 
       String str = editText1.getText().toString(); 
       double dol = Double.parseDouble(str); 
       double doltors = dol * 65; 
       String str2 = Double.toString(doltors); 

       editText.setText(str2); 
      }catch(NumberFormatException e){ 
       // invalid string entered 
       editText.setText(""); 
      } 
     } 
    } 

    @Override 
    public void afterTextChanged(Editable s) { 

    } 
}); 
+0

非常感謝,它工作正常@bradkratky – Prime

+0

還有一件事情與它有關,我們可以在這裏使用onKeyListener嗎? – Prime

+0

我一直使用'TextWatcher',我相信它更具體,因爲它會在文本發生變化時作出反應。我沒有太多的經驗,但它似乎onKeyListener是一種查看方法檢測硬件鍵輸入 - 其他答案表明它不太可靠http://stackoverflow.com/questions/24425838/edittext-onkeylistener-not-working-解決方法與變通辦法 – bradkratky

相關問題