Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android recycleview edittext 加減框聯動 多重效果

android recycleview edittext 加減框聯動 多重效果

編輯:關於Android編程

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的監聽問題。
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved