记录,自用
内容
在RecyclerView item中带有EditText,EditText取值赋值数据错位,以及只保存最后一个item数据的原因:
public void addTextChangedListener(TextWatcher watcher) {
if (mListeners == null) {
mListeners = new ArrayList<TextWatcher>();
}
mListeners.add(watcher);
}
mListeners 是一个ArrayList数组,当多次调用addTextChangedListener时,一个editText可以绑定多个textWatcher监听器,所以要记住在每次调用addTextChangedListener完之后必须调用removeTextChangedListener来接触绑定。
那调用这两个方法的时间节点是在哪里的呢?首先我们要知道如果一个editText要获取输入值那它就首先必须要获取到焦点了,没错,答案就是设置setOnFocusChangeListener监听器来判断焦点的变化从而设置addTextChangedListener和removeTextChangedListener。
代码:
TextWatcher titleWatcher = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void afterTextChanged(Editable editable) {
String s = editable.toString();
if (!StringUtils.isEmpty(s)) {
item.setTitle(s);
}
}
};
EditText etTitle = helper.getView(R.id.et_desire_title);
etTitle.setOnFocusChangeListener((view, b) -> {
if (b) {
etTitle.addTextChangedListener(titleWatcher);
} else {
etTitle.removeTextChangedListener(titleWatcher);
}
});