android recycleview edittext 加减框联动 多重效果

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的监听问题。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值