2013-07-05 2 views
0

У меня есть строковая переменная, используемая в методе, и я хотел бы сравнить текст из моего EditText с этой переменной.Изменение текста TextView, когда текст EditText соответствует строке. Нет кнопок

Как только они совпадают, я хотел бы обновить TextView до уровня, отличного от того, что он в настоящее время. Код ниже:

public void textChangeMethod() { 

TextView myText = (TextView)findViewById(R.id.my_Text); 
EditText myEdit = (EditText)findViewById(R.id.my_Edit); 

String testString = "Test"; 
String matchString = myEdit.getText().toString(); 

if(matchString == testString){ 
    myText.setText("Finished") 
} 

Однако, проблема в том, это, если оператор работает до того, как пользователь сделал с вводом FuL слово, и оно никогда не будет правдой. Я бы не использовал кнопку, чтобы убрать это.

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

Я также подумал об использовании таймера обратного отсчета, а затем цикл while, чтобы постоянно проверять значение текстового значения для строки. Я хочу быть максимально эффективным.

ПОЛНЫЙ КОД НИЖЕ

public class NewClass extends Activity { 

@SuppressLint("NewAPI") 



protected void onCreate(Bundle savedInstanceState) { 

    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_game_screen); 

    // Show the Up button in the action bar. 
    setupActionBar(); 

    textChangeMethod(); 


} 





public void textChangeMethod() { 



    //Local variables 
    final TextView myText = (TextView)findViewById(R.id.my_Text); 
    final String testString = "Test"; 
    EditText myEdit = (EditText)findViewById(R.id.my_Edit); 
    final String matchString = myEdit.getText().toString(); 




    TextWatcher filterTextWatcher = new TextWatcher() { 

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

     @Override 
     public void onTextChanged(CharSequence s,int i, int i2,int i3) 
     { 
      if(!TextUtils.isEmpty(s) && matchString.equals(s)){ 
      myText.setText("Finished"); 
     } 
     } 

     @Override 
     public void afterTextChanged(Editable arg0) 
     { 
     } 
    }; 

    myEdit.addTextChangedListener(filterTextWatcher); 

} 

FINAL EDIT

Оба ответа помогли. Я также смог посмотреть больше в Интернете и получить подробную статью о Text Watcher.

Мне нужно было использовать 'aterTextChange'. Однако теперь у меня есть новая проблема. Если я не смогу понять это, я вернусь, чтобы опубликовать новый вопрос.

Как всегда, спасибо за поддержку.

FINAL EDIT # 2

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

После быстрого поиска стека, кажется, мне нужно реализовать removeTextChangedListener, чтобы он переставал быть вызванным.

Все хорошо. Хотел бы я согласиться на оба ответа. Спасибо.

+0

вы получите ваш EditText строку, когда ваша активность инициирована, так пусто и условие на onTextChange() никогда не было правдой! поэтому вы должны получить его on onTextChange() для инструкции if. –

ответ

1

Textwatcher ваше решение, если у вас есть проблемы, чтобы реализовать это плз разместить свои коды, но вот пример кода для реализации Textwatcher и вы можете поставить, если заявление в onTextChange() функции обратного вызова:

TextWatcher filterTextWatcher = new TextWatcher() { 
     public void beforeTextChanged(CharSequence s, int start, int count,int after) 
     { 
     } 

     public void onTextChanged(CharSequence s,int start, int before,int count) 
     { 
      if(s.equals(testString)){ 
      myText.setText("Finished") 
     } 
     } 

     @Override 
     public void afterTextChanged(Editable arg0) 
     { 
     } 
    }; 

    EditText filterText = (EditText)dialog.findViewById(R.id.edtItemFilter); 
    filterText.addTextChangedListener(filterTextWatcher); 

, а также не использовать == оператора для сравнения строк вместо этого использовать:

если (matchString.equals (СравниваемаяСтрока))

+0

Хорошо, я ценю вашу помощь, однако мой текст все еще не меняется. Я прочитал документ TextWatcher на сайте Android, а onTextChanged утверждает, что в '' '' 'символы' count', начинающиеся с 'start', только что заменили старый текст с длиной' before'. Я не знаю, что это значит. Я прямо копирую/вставляю код в свой метод, и текст TextView не меняется. Нужно ли что-то делать с переменными 'int' в аргументах forTexChanged? – Phoenix

+0

ваш wellcome и plz отправляют ваши коды, может быть, я могу помочь! –

+0

вызывается, когда вы вводите символы в ваши контрольные точки EditText? Put, чтобы проверить, был ли он вызван или нет, и он должен работать без работы с переменной count. –

1

TextW atcher должен работать просто отлично, вам нужно только один раз инициализировать слушателя, поэтому в вашем onCrateView() в действии. Также, как и @Arash, используйте .равен (CharSequence c) вместо == операнд. Помимо этого, надеюсь, на ваш вопрос будет дан ответ.

final TextView myText = (TextView)findViewById(R.id.my_Text); 
EditText myEdit = (EditText)findViewById(R.id.my_Edit); 

myEdit.addTextChangedListener(new TextWatcher() { 
    @Override 
    public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) {} 

    @Override 
    public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) { 
     if(!TextUtils.isEmpty(charSequence) && myText.equals(charSequence)) { 
      // Do something with myText 
     } 
    } 
    @Override 
    public void afterTextChanged(Editable editable) { } 
}); 

EDIT

После просмотра ваш полный код этой строки:

final String matchString = myEdit.getText().toString(); 

Эта строка будет пустой поэтому он никогда не будет оценивать заявление. Его пустое, потому что пользователь никогда ничего не вводил. Скажем, вы хотите, чтобы соответствовать строке «Hello» вы могли бы сделать это:

public void textChangeMethod() { 
    final TextView myText = (TextView)findViewById(R.id.my_Text); 
    EditText myEdit = (EditText)findViewById(R.id.my_Edit); 
    final String matchString = "Hello"; 

    TextWatcher filterTextWatcher = new TextWatcher() { 

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

     @Override 
     public void onTextChanged(CharSequence s,int i, int i2,int i3) 
     { 
      if(!TextUtils.isEmpty(s) && matchString.equals(s)){ 
       myText.setText("Finished"); 
      } 
     } 

     @Override 
     public void afterTextChanged(Editable arg0) {} 
    }; 

    myEdit.addTextChangedListener(filterTextWatcher); 
} 
+0

Добавлен полный код. Это все еще не работает. – Phoenix

+0

См. Изменение выше. Надеюсь, это решает проблему. –

Смежные вопросы