【Android】RecycleView中的EditText 同时设置输入监听和输入过滤时的bug

我们开发过程中, 会遇到列表中金额/数量/重量的输入时, 需要监听输入实时进行累计计算, 也需要设置输入过滤进行输入限制。

遇到的问题:
editText调用 editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(10)}) , 若有设置输入监听, 则会调用 onTextChanged()方法, 而且, s.toString()会为空, 一是需要注意这个回调对你的数据的影响。二是因为这个过滤, 会使onTextChanged()被多回调一次。

解决方法:
addTextChangedListener(mEtWeighNum, mTvAmount, detailCategoryBean, isResubmit) 至于mEtWeighNum.setFilters(new InputFilter[]{new InputFilter.LengthFilter(10)}) 之后
`
如下代码

//  输入过滤, 需要至于设置输入监听之前, setText()之前
  mEtWeighNum.setFilters(new InputFilter[]{new InputFilter.LengthFilter(10)});
        
 // 输入监听, 记得监听要放在设值前 - 需要至于设置输入过滤之后, setText()之前
 addTextChangedListener(mEtWeighNum, mTvAmount, detailCategoryBean, isResubmit);

 // 上称量
  mEtWeighNum.setText("text");

输入监听的方法

 /**
     * 设置输入监听
     */
    private void addTextChangedListener(EditText editText, final TextView categoryAmountTv, final RecycleOrderDetailCategoryBean detailCategoryBean, final boolean isResubmit) {
        TextWatcher 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) {
                Log.i("onTextChanged", "品类名:" + detailCategoryBean.getResName() + "  内容: " + s.toString())
            }

            @Override
            public void afterTextChanged(Editable s) {

            }
        };
        setTextWatcher(editText, textWatcher);
    }

看log 验证:

  • 情况一:
    addTextChangedListener(mEtWeighNum, mTvAmount, detailCategoryBean, isResubmit)至于mEtWeighNum.setFilters(new InputFilter[]{new InputFilter.LengthFilter(10)})之后的 , 内容正常, 回调一次
04-11 17:59:33.272 11452-11452/com.ps.recycling2b I/onTextChanged: 品类名:纺织物  内容: 0.22
04-11 17:59:33.305 11452-11452/com.ps.recycling2b I/onTextChanged: 品类名:纸类  内容: 10.20
  • 情况二:
    addTextChangedListener(mEtWeighNum, mTvAmount, detailCategoryBean, isResubmit) 至于mEtWeighNum.setFilters(new InputFilter[]{new InputFilter.LengthFilter(10)}) 之前。 内容被置空了,回调两次
04-11 18:02:25.739 12678-12678/com.ps.recycling2b I/onTextChanged: 品类名:纺织物  内容: 
04-11 18:02:25.752 12678-12678/com.ps.recycling2b I/onTextChanged: 品类名:纺织物  内容: 
04-11 18:02:25.784 12678-12678/com.ps.recycling2b I/onTextChanged: 品类名:纸类  内容: 
04-11 18:02:25.794 12678-12678/com.ps.recycling2b I/onTextChanged: 品类名:纸类  内容: 

你可能感兴趣的:(【Android】RecycleView中的EditText 同时设置输入监听和输入过滤时的bug)