RecyclerView EditText 使用记录

记录,自用

内容

在RecyclerView item中带有EditText,EditText取值赋值数据错位,以及只保存最后一个item数据的原因:

 public void addTextChangedListener(TextWatcher watcher) {
       if (mListeners == null) {
           mListeners = new ArrayList();
       }

       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);
            }
        });

段落摘至:https://blog.csdn.net/qq402164452/article/details/53373810

你可能感兴趣的:(RecyclerView EditText 使用记录)