【问题标题】:Converter app using two edit Text only仅使用两个编辑文本的转换器应用程序
【发布时间】:2016-11-10 00:34:16
【问题描述】:

我正在制作一个将卢比转换为美元的转换器应用程序,反之亦然,我只想使用两个编辑文本,我希望它能够工作,因为当我在编辑文本中输入一个用于卢比的值时,它应该同时显示编辑文本中用于美元的转换值,更准确地说,我希望如果我想将 120 卢比转换为美元,当我开始输入 120 时,它应该在美元编辑文本中同时显示转换后的值,然后是12,最后是 120。

我试过了-

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

               }
           });
       }

我哪里错了?

【问题讨论】:

标签: android


【解决方案1】:

监听器应该被添加一次,然后他们执行他们的任务直到他们被移除。由于您的外部 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) {

    }
});

【讨论】:

  • 还有一个相关的,这里可以使用onKeyListener吗?
  • 我一直使用TextWatcher,我认为它更具体,因为它会在文本更改时做出反应。我没有太多经验,但似乎 onKeyListener 是一种检测硬件键输入的 View 方法 - 其他答案表明它不太可靠stackoverflow.com/questions/24425838/…
猜你喜欢
  • 2015-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多