2016-07-07 69 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

相关问题