afterTextChanged()回调被称为无文本中实际改变(afterTextChanged()

2019-07-04 14:00发布

我有一个片段EditText和内侧onCreateView() I A添加TextWatcherEditText

每个被加入第二次的片段时间afterTextChanged(Editable s)回调被调用而没有被更改过的文字。

下面的代码片段:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
...
    myEditText = (EditText) v.findViewById(R.id.edit_text);
    myEditText.addTextChangedListener(textWatcher);
...
}

TextWatcher textWatcher = new TextWatcher() {

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        searchProgressBar.setVisibility(View.INVISIBLE);
    }

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

    }

    @Override
    public void afterTextChanged(Editable s) {
        Log.d(TAG, "after text changed");
    }
}

我还设置保留其状态的片段,我守在活动片段的实例。

Answer 1:

编辑解决方案:

因为它似乎文本从片段连接,因为片段恢复的观点以前的状态,第二次改变。

我的溶液中添加text watcheronResume()自恢复的状态之前 onResume被调用。

@Override
public void onResume() {
    super.onResume();
    myEditText.addTextChangedListener(textWatcher);
}

编辑正如@MiloszTylenda已经在评论中提到的,最好是去掉TextwatcheronPause()回调,以避免泄漏Textwatcher

@Override public void onPause() {
  super.onPause();
  myEditText.removeTextChangedListener(watcher);
}


文章来源: afterTextChanged() callback being called without the text being actually changed