由于Edittext持有对Activity的context的引用,导致Activity无法正常回收。
解决办法:重写EditText,将对Activity中Context的引用,改为对ApplicationContext的引用。
super(context);
改成:
super(context.getApplicationContext());
备注:存在隐患,会导致点击输入框,无法弹起键盘的问题;慎用!慎用!慎用!
完整示例:
public class TopicEditText extends androidx.appcompat.widget.AppCompatEditText {
public TopicEditText(Context context) {
super(context.getApplicationContext());// 关键点
initView();
}
public TopicEditText(Context context, AttributeSet attrs) {
super(context.getApplicationContext(), attrs);
initView();
}
public TopicEditText(Context context, AttributeSet attrs, int defStyleAttr) {
super(context.getApplicationContext(), attrs, defStyleAttr);
initView();
}
private void initView() {
addTextChangedListener(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 editable) {}
});
}
}