0
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)); 


} 

}, как обращаться с addTextChangedListener и памятью

Goodmorning все :)

это непрерывный вопрос из этого: Question 1

этот пример кода, что я пытаюсь делать. Но у меня есть некоторые проблемы. Я думаю, что большинство из них предназначены для логики переменных и как обрабатывать ввод в более EditTexts. например:

  1. Основная проблема заключается в том, что я не могу использовать более одного addTextChangedListener. Я пытаюсь объяснить лучше: если я оставлю код, как здесь, приложение выйдет из строя. Я не уверен, возможно, это связано с тем, как я обрабатываю три EditTexts.
  2. то у меня проблема, когда я удаляю текст: если у меня есть «5.99» и i пресса, когда он удаляет его, удаляет до 5, а затем сбой. Пробали я должен установить, когда текстовое поле пуст переменные = 0.

Вы можете мне помочь? Большое спасибо

ответ

4
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. 
+0

Большое спасибо –

+0

Можете ли вы объяснить мне, что вы наделали? Просто чтобы понять это лучше –

+0

Я создал 3 textwatcher для всех 3 edittext отдельно. И из каждого метода расчета сначала делаю вычисления, а затем удаляю другой текстовый элемент, прежде чем устанавливать текст в edittext, потому что, если я не удалю textwatcher и setText в edittext, тогда он начнет вызывать рекурсивно друг друга. И снова я установил прослушиватель textwatcher тем, которые я удалил ранее, работает обычно, как и раньше. –

0

хорошо, как вы думаете, что вы делаете свою операцию, даже если у вас нет текста для работы с. Я бы порекомендовал, сделайте нулевую/пустую проверку в editTextView, прежде чем вы это сделаете thefromPercent(); операция. Надеюсь, это поможет.

+0

что-то вроде проверки, если EditText пуст, "", variables = 0 (?) –

+0

да .. что-то вроде этого. if ((!) Percent.getText(). toString(). isEmpty()) && (Percent.getText(). toString()! = null)) {// выполняем вашу работу} –

+0

ладно, спасибо. –