Fragment中的TextWatcher引发自动填写空字符串

在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

你可能感兴趣的:(Fragment中的TextWatcher引发自动填写空字符串)