2015-12-09 5 views
0

Я использую textChangedListener для редактирования текста, чтобы показать/скрыть кнопку плавающего действия.Android TextChangedListener TextWatcher() off behavior

Все в целом работает должным образом. Если текст редактирования не пуст, тогда покажите fab, если пусто, а затем скройте fab.

Однако я заметил, что при использовании backspace, чтобы удалить введенный текст, удаление первого пробела запускает hide fab, а затем быстро показывает fab, так как editText не пуст.

Я осмотрелся и ничего не видел по этому поводу. Так что я должен делать что-то неправильно, но я не уверен, что.

Ниже приводится моя реализация. Я попробовал и все они дают мне такое же поведение if(editText.getText().toString().isEmpty())

if(editText.getText().toString().length()==0))

if(editText.getText().toString().equals("")

editText.addTextChangedListener(new TextWatcher() { 
    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count)  { 
    Log.d(TAG, "TEXT CHANGED onTextChanged" + editText.getText().toString()); 


    // TODO Auto-generated method stub 
    } 

    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
    Log.d(TAG, "TEXT CHANGED beforeTextChanged" + editText.getText().toString()); 


    // TODO Auto-generated method stub 
    } 

    @Override 
    public void afterTextChanged(Editable s) { 
    Log.d(TAG, "TEXT CHANGED afterTextChanged" + editText.getText().toString()); 
    // s = editText.getText().toString(); editText.getText().toString() 
    if (s.toString().isEmpty()) { 
     fab.setVisibility(View.INVISIBLE); 
     fab.setAnimation(slideDownAnim); 
     slideDownAnim.start(); 
    }else{ 
     fab.setVisibility(View.VISIBLE); 
     fab.setAnimation(slideUpAnim); 
     slideUpAnim.start(); 
    } 
    // TODO Auto-generated method stub 
    } 
}); 

Заранее спасибо

*** UPDATE **** Найдено ответ, который решает мой проблема здесь. TextWatcher events are being fired multiple times

+0

ааа нашел ответ, который работал для меня в другом потоке .. http://stackoverflow.com/questions/17535415/textwatcher-events-are-being-fired- много раз – user3246849

ответ

0

попробовать это

editText.addTextChangedListener(new TextWatcher() { 
    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count)  { 
    Log.d(TAG, "TEXT CHANGED onTextChanged" + editText.getText().toString()); 

    if (s.toString().isEmpty()) { 
     fab.setVisibility(View.INVISIBLE); 
     fab.setAnimation(slideDownAnim); 
     slideDownAnim.start(); 
    }else{ 
     fab.setVisibility(View.VISIBLE); 
     fab.setAnimation(slideUpAnim); 
     slideUpAnim.start(); 
    } 
    } 

    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
    Log.d(TAG, "TEXT CHANGED beforeTextChanged" + editText.getText().toString()); 


    // TODO Auto-generated method stub 
    } 

    @Override 
    public void afterTextChanged(Editable s) { 
    Log.d(TAG, "TEXT CHANGED afterTextChanged" + editText.getText().toString()); 
    // s = editText.getText().toString(); editText.getText().toString() 

    // TODO Auto-generated method stub 
    } 
}); 
+0

Deepak, спасибо за ответ, но я уже пробовал, что и странное поведение остается. Нечетное поведение существует только после того, как первое пространство будет удалено. Думаю, я мог бы попытаться взломать попытку проверить положение первого места и сделать что-то там, чтобы избежать скрытия и отображения кнопки снова, но это кажется глупым. В любом случае еще раз спасибо – user3246849