当前位置: 首页 > 知识库问答 >
问题:

如何处理添加文本更改的接收器和内存

朱毅
2023-03-14
public class MainActivity extends AppCompatActivity {

EditText Percent, mmolGlic, mgGlic;

double mmol = 0, mg = 0, perc = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Percent = (EditText) findViewById(R.id.percent);
    mmolGlic = (EditText) findViewById(R.id.mmol_glic);
    mgGlic = (EditText) findViewById(R.id.mg_glic);



    /*mmolGlic.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) {
            frommMol();
        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });*/

    Percent.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) {
            fromPercent();
        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });

    /*mgGlic.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) {

        }

        @Override
        public void afterTextChanged(Editable s) {
            frommg();
        }
    });*/
}

public void frommMol() {
    mmol = Double.parseDouble(mmolGlic.getText().toString());
    perc = (mmol/10.929) + 2.15;
    Percent.setText(String.format( "%.2f", perc ));
}

public void fromPercent(){
    perc = Double.parseDouble(Percent.getText().toString());
    mmol = (perc - 2.15) * 10.929;
    mmolGlic.setText(String.format( "%.2f", mmol ));
    mg = (perc*28.7) - 46.7;
    mgGlic.setText(String.format( "%.2f", mg ));
}

public void frommg(){
    mg = Double.parseDouble(mgGlic.getText().toString());
    perc = (mg + 46.7) / 28.7;
    Percent.setText(String.format( "%.2f", perc ));


}

}

大家早上好:)

这是这个问题的延续:问题1

这是我试图做的事情的示例代码。但我有一些问题。我认为它们中的大多数都是针对变量的逻辑以及如何在更多编辑文本中处理输入。例如:

    < li >主要问题是我不能使用多个addTextChangedListener。我试图更好地解释:如果我把代码留在这里,应用程序会崩溃。我不确定,也许是因为我处理这三个版本的方式。 < li >然后,当我删除文本时,我遇到了一个问题:如果我有“5.99”并按del,当它删除时,它会一直删除到5,然后崩溃。可能我应该在文本字段为空时设置变量= 0。

你能帮我吗?非常感谢。

共有2个答案

阴焱
2023-03-14

看起来,即使你没有任何文本,你也在做你的操作..我建议,在执行thefromPercent()之前,在editTextView上执行null/empty检查;操作。希望有帮助。

葛昱
2023-03-14
public class MainActivity extends AppCompatActivity {

EditText Percent, mmolGlic, mgGlic;

double mmol = 0, mg = 0, perc = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Percent = (EditText) findViewById(R.id.percent);
    mmolGlic = (EditText) findViewById(R.id.mmol_glic);
    mgGlic = (EditText) findViewById(R.id.mg_glic);

 Percent.addTextChangedListener(percentWatcher);
        mmolGlic.addTextChangedListener(mmolGlicTextWatcher);
        mgGlic.addTextChangedListener(mgGlicWatcher);
}

 public void frommMol() {
        if (!mmolGlic.getText().toString().trim().isEmpty()) {
            mmol = Double.parseDouble(mmolGlic.getText().toString());
            perc = (mmol / 10.929) + 2.15;
            Percent.removeTextChangedListener(percentWatcher);
            Percent.setText(String.format("%.2f", perc));
            Percent.addTextChangedListener(percentWatcher);
        }
    }

    public void fromPercent() {
        if (!Percent.getText().toString().trim().isEmpty()) {
            perc = Double.parseDouble(Percent.getText().toString().trim());
            mmol = (perc - 2.15) * 10.929;
            mmolGlic.removeTextChangedListener(mmolGlicTextWatcher);
            mgGlic.removeTextChangedListener(mgGlicWatcher);
            mmolGlic.setText(String.format("%.2f", mmol));
            mg = (perc * 28.7) - 46.7;
            mgGlic.setText(String.format("%.2f", mg));
            mmolGlic.addTextChangedListener(mmolGlicTextWatcher);
            mgGlic.addTextChangedListener(mgGlicWatcher);
        }
    }

    public void frommg() {
        if (!mgGlic.getText().toString().trim().isEmpty()) {
            mg = Double.parseDouble(mgGlic.getText().toString());
            perc = (mg + 46.7) / 28.7;
            Percent.removeTextChangedListener(percentWatcher);
            Percent.setText(String.format("%.2f", perc));
            Percent.addTextChangedListener(percentWatcher);
        }
    }


    private TextWatcher percentWatcher = new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

        }

        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            fromPercent();
        }

        @Override
        public void afterTextChanged(Editable editable) {

        }
    };

    private TextWatcher mgGlicWatcher = new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

        }

        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
            frommg();
        }

        @Override
        public void afterTextChanged(Editable editable) {

        }
    };

    private TextWatcher mmolGlicTextWatcher = new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

        }

        @Override
        public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
                frommMol();
        }

        @Override
        public void afterTextChanged(Editable editable) {

        }
    };

}


Hope this will help you.
 类似资料:
  • 我下载用户数据,其中我有一个数字,电子邮件,网站和纯文本在描述。我的第一个问题是如何在文本中找到这些链接和编号,识别并使用它们?当用户点击该号码时,应用程序应打开新的应用程序拨打电话。 示例说明文本: Lorem ipsum dolor sit amet,+44 798-09-09 consectetur adipiscing elit,sed do eiusmod tempor incidunt

  • 问题内容: 内容: 我想使用jenkins定期仅处理SVN中已更改的文件,并将处理的输出提交回SVN。 原因: 我们正在将二进制文件提交到SVN中(我们正在使用Oracle Forms,并且正在提交fmb- Files)。我创建了一个脚本,将fmb导出到xml(使用Oracle的原始Fmb2XML工具),然后我将XML转换为我们也想提交的纯源。这使我们可以进行摸索,查看更改等。 问题: 目前,我只

  • 问题内容: 我有一个我想在其中的文本更改时调用一个函数。 我怎么做? 问题答案: Java跟踪JTextField文本内容变化的适当侦听器是DocumentListener,您必须将其添加到JTextField的文档中:

  • 我们正在使用kafka拓扑转发向kafka主题发送记录。 我们之前使用了一个单独的生产者来发布消息,我们能够获取消息的偏移量和分区。现在我们想用上下文替换它。向前地 如何使用上下文获取Kafka接收器处理器发送的记录的偏移量和分区。向前地

  • 问题内容: 我想检测何时文本框的内容已更改。我可以使用keyup方法,但是它也可以检测不会产生字母的击键,例如箭头键。我想到了使用keyup事件执行此操作的两种方法: 仔细检查所按键的ASCII码是否为字母\退格\删除 使用闭包来记住按键之前文本框中的文本,并检查是否已更改。 两者看起来都很麻烦。 问题答案: 开始观察“输入”事件而不是“改变”事件。 …很干净,但可以扩展到: