編輯:關於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的監聽問題。
Android的消息機制幾乎是面試必問的話題,當然也並不是因為面試,而去學習,更重要的是它在Android的開發中是必不可少的,占著舉足輕重的地位,所以弄懂它是很有必要的
本節學習使用C語言加密字符串,大家都知道使用JAVA實現的加密都可以反編譯的,而使用C寫的加密是很難被反編譯的。所以我們使用JNI學習如何使用C實現對字符串的加密。首先:
概述Android框架支持設備的相機拍照和錄像功能,你的應用可以直接調用系統的Camera應用來拍照或者錄像(比如微信拍照),當然也可以利用Android系統提供的API
初看這個博文名,我都蒙蔽了,Activity的啟動模式居然能扯到內存問題,還有內存洩漏問題,WTF!!!不要方,小司機我帶你理解和稍微深入的探討一下Activity的四種