在ViewPager + Fragment的架構中离赫,每次在Fragment給EditText設置完成TextWatcher之后四啰,第一次展示沒有問題雄可,但是第二次創(chuàng)建這個Fragment的時候乌助,TextWatcher會自動調用afterTextChanged方法并傳參空字符串呻率,這個實在是討厭得很,在網(wǎng)友的指導下也只能勉強避開這個問題,具體解決方案如下:
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()之前執(zhí)行的棵癣,所以能夠避免掉自動傳空的問題
@Override
public void onDestroyView() {
if (editText != null) {
editText.clearFocus();
if (textWatcher != null) {
editText.removeTextChangedListener(textWatcher);
textWatcher = null;
}
}
super.onDestroyView();
}
其次在fragment. onDestroyView()方法中注銷掉textWatcher