我们开发过程中, 会遇到列表中金额/数量/重量的输入时, 需要监听输入实时进行累计计算, 也需要设置输入过滤进行输入限制。
遇到的问题:
为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: 品类名:纸类 内容: