在Android開發中有一種需求,比如姓名,電話,性別,地址這幾種必填信息填寫完了後提交按鈕才變成高亮,提示可以提交了,其他的信息非必填所以不用管了.你們是如何做這個小功能的?
下面是我的做法.
EditText mName;
EditText mPhone;
EditText mSex;
Button mBtn;
private static final int FLAG_NAME = 0x1;
private static final int FLAG_MOBILE = 0x2;
private static final int FLAG_SEX = 0x4;
private static final int FLAG_OK = 0x7;
//此處省略初始化......
//給需要的EditText增加內容觀察者
private void editTextAddWitch() {
mName.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
//其他的EditText也如此,修改FLAG_NAME爲相應的標誌.
afterInput(FLAG_NAME, !TextUtils.isEmpty(s.toString()));
}
});
//省略其他的內容監聽
}
/**
* & ~都是位操作運算符&是與運算,規定 1&1=1 1&0=0 0&1=0 0&0=0,
* ~是取反運算,它的作用是將二進制數中的1轉換成0,把0轉換成1。
* 例如~11010=00101=101而 a&=~b的意思就是 a= a & (~b)
* |是按位或操作,就是只要有一個1就是1,兩個都是0纔是0
* @param flag
* @param isValid
*/
private void afterInput(int flag, boolean isValid) {
if (isValid) {
mSubmitFlag |= flag;
} else {
mSubmitFlag &= ~flag;
}
mBtn.setEnabled(mSubmitFlag == FLAG_FINISHED);
}
0x1 == 0001
0x2 == 0010
0x4 == 0100
三者或 == 0111 == 0x7