edittext中需要设置最大值最小值,两边的联动加减号需要跟edittext进行联动。
每次edittext的监听需要改变其他效果。
单纯的用textwatcher已经不能够满足需求需要了,需要进行一个filter的设置,限定其输入的最大值最小值。
在recycleview 中进行每个item的edittext的值的获取与设置,注意:应该不要将这中组件封装成一个控件,空间之中的一些全局变量会影响到recycleview的item的显示,产生莫名其妙的问题。
所以,将整个的view都添加到item的布局中。
下面贴出adapter的一些很关键的代码:
//设置最大值最小值的设置
holder.etAmountTxt.setFilters(new InputFilter[]{ new InputFilterMinMax("0", parseInt(bean.getSumQty())/parseInt(beantemp.getRatio())+"")});
if(holder.etAmountTxt.getTag() instanceof MyTextWatcher){
holder.etAmountTxt.removeTextChangedListener((MyTextWatcher)holder.etAmountTxt.getTag());
}else{
}
在这之中有个inputfilterminmax类是自定义的一个过滤器,用来限定最大值最小值。
/**
* 限制最大值最小值的问题
*/
public class InputFilterMinMax implements InputFilter {
private int min, max;
public InputFilterMinMax(int min, int max) {
this.min = min;
this.max = max;
}
public InputFilterMinMax(String min, String max) {
this.min = Integer.parseInt(min);
this.max = Integer.parseInt(max);
}
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
try {
int input = Integer.parseInt(dest.toString() + source.toString());
if (isInRange(min, max, input))
return null;
} catch (NumberFormatException nfe) { }
return "";
}
private boolean isInRange(int a, int b, int c) {
return b > a ? c >= a && c <= b : c >= b && c <= a;
}
}
在item的edittext的监听如下,每次需要将watcher移除掉,避免每次的item重用watcher,造成问题。
//组合控件的控制 starting
MyTextWatcher myTextWatcher = new MyTextWatcher() {
@Override
public void afterTextChanged(Editable s) {
if (Common.getInstance().isNotFastClick()) {
if (s.toString().isEmpty() || s.toString().contains("-"))
return;
//todo 业务逻辑
}
}
};
holder.etAmountTxt.addTextChangedListener(myTextWatcher);
holder.etAmountTxt.setTag(myTextWatcher);
其他对于加减号的监听,以及对中心edittext的联动相关:
//组合控件 减少数量 starting
holder.decreaseLin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int editInt = parseInt(holder.etAmountTxt.getText().toString());
//todo
holder.etAmountTxt.setText(editInt+"");
// notifyItemChanged(position);
}
});
//组合控件 减少数量 ending
holder.increaseLin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int editInt = parseInt(holder.etAmountTxt.getText().toString());
if(laterNum <= parseInt(bean.getSumQty())){
editInt = laterEditInt;
bean.setAmount(laterNum);//设置进去的都是基本的数据
}else{
//todo
}
holder.etAmountTxt.setText(editInt+"");
// notifyItemChanged(position);
}
});
//组合控件的控制 ending
设置进去的值,依赖与每次的notify操作时候的,来进行数据的同步。
holder.etAmountTxt.setText();大概注意到这里面的一些思想,就能够很完美的解决掉,item的错乱及recycleview的edittext的监听问题。