2012-06-27 11 views
0

У меня есть две проблемы с этим фрагментом кода. Благодаря некоторым приятным парням здесь, в предыдущем вопросе, я получил его для правильной работы, но теперь я снова вижу себя в бесконечном цикле, и я не понимаю, откуда это происходит. То, что я пытаюсь сделать здесь, это игра в палач: обрабатывайте один символ, читаемый в EditText (litera), и я ищу его одним словом (cuvAles), затем я хочу заменить подчеркивание соответствующей буквой.Android: бесконечный цикл в EditText TextWatcher

Вот функция, это с проблемой:

litera.addTextChangedListener(new TextWatcher(){ 
      public void afterTextChanged(Editable s) {} 
      public void beforeTextChanged(CharSequence s, int start, int count, int after){} 
      public void onTextChanged(CharSequence s, int start, int before, int count){ 
       String ghici = litera.getText().toString(); 

       if(!ghici.equals("")){ 
       System.out.println(ghici); 
       litera.setText(""); 

       if(cuvAles.contains(ghici)){ 
        int poz = 0; 
        while(cuvAles.indexOf(ghici, poz)!= -1){ 
         poz = cuvAles.indexOf(ghici); 
         String spatii = cuvant.getText().toString(); 
         String spatii2 = spatii.substring(0, poz*2-1) + ghici + spatii.substring(poz*2+1, spatii.length()-2); 
         cuvant.setText(spatii2); 
        } 
       } 
       else gresite.append(ghici+" "); 
       } 
      } 
     }); 

Есть две проблемы:

1) String spatii2 = spatii.substring(0, poz*2-1) + ghici + spatii.substring(poz*2+1, spatii.length()-1); бросает исключение StringIndexOutOfBounds. Я думаю, что это partya.length() часть, но я пробовал с -2, и он все еще не работает. Причина, по которой слово не соответствует подчеркиваниям, заключается в том, что у меня есть промежутки между ними, чтобы быть ясными.

2) Если я удалю другую проблему (замените строку на константу), я получаю бесконечный цикл (я думаю, что это бесконечный цикл, потому что программа перестает отвечать на запросы, и я вижу, что GC в logcat работает отчаянно) ,

ответ

1

Удалить текст изменение слушателя перед обновлением EditText как он будет продолжать называть ваше изменение слушателя текста ..

litera.addTextChangedListener(new TextWatcher(){ 
      public void afterTextChanged(Editable s) {} 
      public void beforeTextChanged(CharSequence s, int start, int count, int after){} 
      public void onTextChanged(CharSequence s, int start, int before, int count){ 
       String ghici = litera.getText().toString(); 

    litera.removeTextChangedListener(this);    


       if(!ghici.equals("")){ 
       System.out.println(ghici); 
       litera.setText(""); 

       if(cuvAles.contains(ghici)){ 
        int poz = 0; 
        while(cuvAles.indexOf(ghici, poz)!= -1){ 
         poz = cuvAles.indexOf(ghici); 
         String spatii = cuvant.getText().toString(); 
         String spatii2 = spatii.substring(0, poz*2-1) + ghici + spatii.substring(poz*2+1, spatii.length()-2); 
         cuvant.setText(spatii2); 
        } 
       } 
       else gresite.append(ghici+" "); 
       } 
      } 
     }); 
+0

К сожалению, это не работает. Любые другие идеи? И о проблеме индекса строки из границ? – FloIancu