java - EditText 字段的值更改相互依赖

标签 java android

我正在尝试构建温度转换器(F -> C 和 C -> F)。

我有 2 个 ET 字段。当用户输入一个时,另一个显示转换后的值,反之亦然。

我知道已经构建了类似的程序,但我找不到解决方案。

它在一个字段上工作正常,但当我尝试编辑另一个字段时应用程序关闭。

这是我的一段代码:

public class Temp extends Activity implements OnClickListener, OnFocusChangeListener {

private EditText temp_f, temp_c;

    protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setContentView(R.layout.temp);

    temp_f = (EditText) findViewById(R.id.temp_f_inp);
    temp_c = (EditText) findViewById(R.id.temp_c_inp);

    temp_c.setOnFocusChangeListener((OnFocusChangeListener) this);
    temp_f.setOnFocusChangeListener((OnFocusChangeListener) this);

}

private TextWatcher tempc = new TextWatcher() {
    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {

        if (temp_c.getText().length() == 0) 
        {
            temp_f.setText("");
        } else {
            float convValue = Float.parseFloat(temp_c.getText()
                    .toString());

            conv_f = ((convValue - 32) * 5 / 9);

            temp_f.setText(String.valueOf(new DecimalFormat(
                    "##.###").format(conv_f)));
        }

    }
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
    @Override
    public void afterTextChanged(Editable s) {

    }       
};

private TextWatcher tempf = new TextWatcher() {
    @Override
    public void onTextChanged(CharSequence s, int start,int before, int count) {

        // TODO Auto-generated method stub
                    if (temp_f.getText().length() == 0) 
                    {
                        temp_c.setText("");
                    } else {

                        float convValue = Float.parseFloat(temp_f.getText()
                                .toString());

                        conv_c = ((convValue * 9) / 5 + 32);

                        temp_c.setText(String.valueOf(new DecimalFormat(
                                "##.###").format(conv_c)));

    }
    @Override
    public void beforeTextChanged(CharSequence s, int start,int count, int after) {}
    @Override
    public void afterTextChanged(Editable s) {

    }
};

@Override
public void onFocusChange(View v, boolean hasFocus) {
        if ((v == findViewById(R.id.temp_c_inp)) && (hasFocus==true)) {
            temp_c.addTextChangedListener(tempc);
        }

        else if((v == findViewById(R.id.temp_f_inp)) && (hasFocus==true)){
            temp_f.addTextChangedListener(tempf);
        } 
}

似乎 onTextChanged 仍然保留已修改的第一个 ET 的值,当我尝试编辑其他 ET 字段时,它会抛出错误。

如有任何帮助,我们将不胜感激!

谢谢!

最佳答案

你可以试试这个:

@Override
 public void onFocusChange(View v, boolean hasFocus) {
     if (v.equals(findViewById(R.id.temp_c_inp))) {
        if(hasFocus){
            temp_c.addTextChangedListener(tempc);
        }else{
            temp_c.removeTextChangedListener(tempc);
        }
     }
    else if(v.equals(findViewById(R.id.temp_f_inp))){
        if(hasFocus){
        I      temp_f.addTextChangedListener(tempf);
        }else{
             temp_f.removeTextChangedListener(tempf);
        }
    } 
}

我没有亲自尝试过代码,但我希望它能帮助你

关于java - EditText 字段的值更改相互依赖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18262603/

相关文章:

java - 存储 Android 应用程序列表

java - Alfresco 社区版中的扫描功能?

java - JOOQ使用Record7封装不同表的字段

java - 将Spring Security开发为通用模块并在Spring Boot微服务架构中切换

java - JDK 已更新,但以前的版本仍显示为当前版本

android - BiometricPromptCompat : Failed to check device credential. 未找到父处理程序

java - MPJ/集群配置无法在另一个线程上接收来自自身的消息

android - 找不到 AndroidManifest.xml 文件,使用 Android 注释后的生成文件夹

android - 在屏幕 sleep Android Cordova 上暂停 Youtube 视频

Android Account Sync 给我一个找不到类的错误......但它不应该