2015-05-26 5 views
-1

Я создаю конвертер единиц для Android. Он имеет два текста редактирования, и я хочу обновить его, поскольку пользователь вводит числа в другом, но я не могу его получить.Два синхронных текста редактирования на android

Я пробовал несколько методов, но до сих пор я не могу заставить это работать. Я очень новичок в Android, и я уже сделал это приложение в java, но здесь я просто не могу его получить.

До сих пор я получил вещь, чтобы работать с по методу щелчка, но я бы очень хотел, чтобы показать преобразование, как пользователь вводит число в тексте редактирования

+0

Разместите код, что вы пытались –

+0

использовать TextWatcher Http:.. // developer.android.com/reference/android/text/TextWatcher.html – httpdispatch

+0

добавить здесь свой код – Amitsharma

ответ

2

Вы должны добавить TextChangedListener, как предложил Чади, но я предлагаю реализовать в другом режиме. Взгляните на следующую реализации TextWatcher

 EditText firstEdit = (EditText) findViewById(R.id.firstEdit); 

     firstEdit.addTextChangedListener(new TextWatcher() { 

      @Override 
      public void onTextChanged(CharSequence s, int start, int before, int count) { 
       // TODO Auto-generated method stub 
      } 

      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
       // TODO Auto-generated method stub 
      } 

      @Override 
      public void afterTextChanged(Editable s) { 
       //Do here your conversion 
       secondEdit.setText(convertedText); 
      } 
     }); 

Я предлагаю вам с помощью afterTextChanged, потому что в качестве официального документа гласит, что там, где вы уверены, что текст на самом деле уже изменился.

Официальный Doc:

Этот метод вызывается, чтобы уведомить вас, что где-то внутри с, текст был изменен. Допустимо внести дальнейшие изменения в s с этот обратный вызов, , но будьте осторожны, чтобы не попасть в бесконечный цикл , так как любые сделанные вами изменения вызовут этот метод снова . (Вы не сказали, где произошло изменение , потому что другие методы afterTextChanged(), возможно, уже сделали другие изменениями и аннулировали смещения. Но если вам нужно знать здесь, вы можете использовать setSpan (Object, int, int, int) в OnTextChanged (CharSequence, INT, INT, INT), чтобы отметить свое место, а затем посмотреть здесь, где пролет кончались

+0

Спасибо Assa, я попытался использовать textWatcher, но так, как я его реализовал дал мне бесконечный цикл, в результате чего произошла ошибка переполнения стека. Но я вижу, как правильно использовать textWatcher сейчас! спасибо! –

+0

@ DanielBernal Pleasure is my :)! – Sid

1

ли, что с addTextChangedListener, как это:

yourEditText.addTextChangedListener(new TextWatcher() { 

     @Override 
     public void onTextChanged(CharSequence s, int start, int before, int count) { 

      //do your conversion 
      yourSecondEditText.setText(text); 

     } 

     @Override 
     public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
      // TODO Auto-generated method stub 

     } 

     @Override 
     public void afterTextChanged(Editable s) { 
      // TODO Auto-generated method stub 

     } 
    }); 
+1

Это ответ, но как утверждает Асса, мы должны использовать afterTextChanged, потому что таким образом мы гарантируем, что текст был изменен. Спасибо! –