2015-01-06 3 views
2

Я попытался реализовать поиск, используя EditText. всякий раз, когда текст вводится в EditText, запрос отправляется с введенным текстом в методе onTextChanged(). Когда я меняю ориентацию телефона с результирующими результатами, метод onTextChanged() вызывается снова с тем же текстом. Как я могу избежать избыточного вызова метода onTextChanged() при изменении ориентации.Android - onTextChanged() вызывается при изменении ориентации телефона

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

    final String enteredKeyword = s.toString(); 


    if(isFragmentVisible && !enteredKeyword.equals("")) { 

    searchTimer.cancel(); 
    searchTimer = new Timer(); 
    TimerTask searchTask = new TimerTask() { 
    @Override 
    public void run() { 
      searchUser(enteredKeyword); 
    } 
}; 
searchTimer.schedule(searchTask, 1500); 
Log.i("", enteredKeyword); 
} 
} 
+0

1) Вы можете установить ранее введенный текст в том же EditText. 2) Чтобы избежать этого, вы можете проверить строку, которая уже выполнена или нет, в методе onTextChanged перед вызовом вашей функции. – Srinivasan

ответ

0

Вам необходимо переопределить метод onConfigurationChanged, чтобы получить обратный вызов всякий раз, когда меняется ориентация.

@Override 
public void onConfigurationChanged(Configuration newConfig) { 
    super.onConfigurationChanged(newConfig); 

    if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { 
     // landscape 
    } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) { 
     // portrait 
    } 
} 

Добавить ниже линии в очевидном

android:configChanges= "orientation" 

Теперь на основе обратного вызова вы можете делать все, что вы хотели сделать.

+0

спасибо daud. но я не должен ничего делать при изменении конфигурации. Мне нужно остановить вызов метода onTextChanged() при изменении ориентации. – arjun

+0

см. .. Если активность будет восстановлена ​​при изменении конфигурации, onTextChanged будет вызываться снова. –

5

У меня есть эта проблема. Так что я переехал addTextChangedListener к методу пост EditText в onCreateView:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

    ... 

    EditText mSearchQuery = findViewById(R.id.search_query); 
    mSearchQuery.post(new Runnable() { 
      @Override 
      public void run() { 
       mSearchQuery.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) { 
         //Some stuff 
        } 

        @Override 
        public void afterTextChanged(Editable s) { 
        } 
       }); 
      } 
     }); 
} 
+1

эй, пожалуйста, расскажите, почему это сработало? Почему вы должны добавить textchangelistener в поток ui? – BrettG

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