我有一个带有 EditText
的 fragment ,在 onCreateView()
内我将 TextWatcher
添加到 EditText
.
每次第二次添加 fragment 时,都会调用 afterTextChanged(Editable s)
回调,而不会更改文本。
这是一个代码 fragment :
@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");
}
}
我还将 fragment 设置为保留其状态,并将 fragment 的实例保留在 Activity 中。
最佳答案
修改后的解决方案:
看起来文本在第二次附加 fragment 时发生了更改,因为 fragment 恢复了 View 的先前状态。
我的解决方案是在 onResume()
中添加 text watcher
,因为状态已恢复 before onResume
被调用。
@Override
public void onResume() {
super.onResume();
myEditText.addTextChangedListener(textWatcher);
}
编辑
正如@MiloszTylenda 在评论中提到的,最好在 onPause()
回调中删除 Textwatcher
以避免泄漏 Textwatcher
。
@Override public void onPause() {
super.onPause();
myEditText.removeTextChangedListener(watcher);
}
关于android - 在没有实际更改文本的情况下调用 afterTextChanged() 回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13721063/