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