Android 如何处理addTextChangedListener和内存

Android 如何处理addTextChangedListener和内存,android,android-studio,android-activity,android-edittext,Android,Android Studio,Android Activity,Android Edittext,} 大家早上好:) 这是一个连续的问题: 这是我试图做的一个示例代码。但是我有一些问题。我认为大多数都是关于变量的逻辑以及如何处理更多文本中的输入。例如: 主要问题是我不能使用多个addTextChangedListener。我试图更好地解释:如果我把代码留在这里,应用程序就会崩溃。我不确定,也许是因为我如何处理这三个文本 当我删除文本时,我遇到了一个问题:如果我有“5.99”并且 按del,删除时将删除,直到5,然后 撞车。可能我应该在文本字段为空时设置 变量=0 你能帮我吗?非常感谢看起来,

}

大家早上好:)

这是一个连续的问题:

这是我试图做的一个示例代码。但是我有一些问题。我认为大多数都是关于变量的逻辑以及如何处理更多文本中的输入。例如:

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


  • 你能帮我吗?非常感谢

    看起来,即使您没有任何文本可供使用,您也在进行操作。。我建议,在执行FromPercent()之前,在editTextView上执行空/空检查;活动希望这能有所帮助。

    看起来,即使没有文本可供使用,您也在进行操作。。我建议,在执行FromPercent()之前,在editTextView上执行空/空检查;活动希望能有所帮助。

    类似于检查EditText是否为空,“,variables=0(?)yes。。像这样的。如果((!Percent.getText().toString().isEmpty())和(&&&(Percent.getText().toString()!=null)){//do your work}它可以工作。但是如果我对所有三个EditText使用addTextChangedListsener,它就会崩溃。可能是因为它在每个EditText的值更改期间执行操作。我不知道我是否解释得很好。看看这个@androidCoder BD,非常感谢。它还在崩溃。我有一些问题,在从editText中删除一个值之后,如何将变量的值设置为0,比如检查editText是否为空,“,variables=0(?)yes。。像这样的。如果((!Percent.getText().toString().isEmpty())和(&&&(Percent.getText().toString()!=null)){//do your work}它可以工作。但是如果我对所有三个EditText使用addTextChangedListsener,它就会崩溃。可能是因为它在每个EditText的值更改期间执行操作。我不知道我是否解释得很好。看看这个@androidCoder BD,非常感谢。它还在崩溃。我有一些问题,在从editText中删除一个值后,如何将变量的值设置为0非常感谢你能告诉我你做了什么吗?为了更好地理解它,我分别为所有3个edittext创建了3个textwatcher。对于每个计算方法,我首先进行计算,然后在将文本设置为edittext之前删除其他textwatcher,因为如果我不将textwatcher和setText删除为edittext,那么它将开始递归地彼此调用。然后我再次将textwatcher listener设置为我之前删除的那个些,使其正常工作。我问你最后一件事:当我从一个editText中删除值时,我如何从另一个editText中删除值?你可以在ContextChanged中检查长度,因此当你得到长度0时,其他两个的editText将被清除。非常感谢。你能解释一下你做了什么吗?为了更好地理解它,我分别为所有3个edittext创建了3个textwatcher。对于每个计算方法,我首先进行计算,然后在将文本设置为edittext之前删除其他textwatcher,因为如果我不将textwatcher和setText删除为edittext,那么它将开始递归地彼此调用。然后我再次将textwatcher listener设置为我之前删除的那个些,使其正常工作。我问你最后一件事:当我从一个editText中删除值时,如何从另一个editText中删除值?你可以在ContextChanged中检查长度,因此当你得到长度0时,清除其他两个editText。
    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 ));
    
    
    }
    
    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.