在ViewPager + Fragment的架构中,每次在Fragment给EditText设置完成TextWatcher之后,第一次展示没有问题,但是第二次创建这个Fragment的时候,TextWatcher会自动调用afterTextChanged方法并传参空字符串,这个实在是讨厌得很,在网友的指导下也只能勉强避开这个问题,具体解决方案如下:
textWatcher = 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) {
}
@Override
public void afterTextChanged(Editable result) {
if (isResumed()) {
// TODO:做你想做的事情
}
}
};
首先在textWatcher. afterTextChanged 里面加上 fragment.isResumed()的判定,这样textWatcher 只有在Fragment准备展示的时候才会起作用,而textWatcher. afterTextChanged自动传递空字符串的操作是在fragment.resume()之前执行的,所以能够避免掉自动传空的问题
@Override
public void onDestroyView() {
if (editText != null) {
editText.clearFocus();
if (textWatcher != null) {
editText.removeTextChangedListener(textWatcher);
textWatcher = null;
}
}
super.onDestroyView();
}
其次在fragment. onDestroyView()方法中注销掉textWatcher
网友评论