本人最近在做的一個項目,關於EditText有這樣一個需求: 用戶在失去當前EditText的焦點時會出發聯網上傳數據的操作,代碼如下:
editText..setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(final View view, boolean hasFocus) {
if(!hasFocus){
//失去焦點後,,向服務器發送Http請求,將數據上傳.
}else{
//用戶獲得焦點.
}
}
};
運行程序發現數據可以上傳了。但是,通過log信息發現,當獲得焦點後,每隔0.5S左右,這個Http請求就會執行一次。
本來還很奇怪的,後來無意中注意到了這個光標。果然,Log信息會隨光標的消失而執行 !hasFocus 的操作。那麼這就麻煩了,每隔0.5S會聯網一次,這…太扯淡了。
我趕緊看了看Android的EditText源代碼,有關CurSor的在TextView中的:
public void setCursorVisible(boolean visible) 方法,有關光標的設置在makeBlink();方法中,可是它是個private方法,代碼如下:
void makeBlink() {
if (shouldBlink()) {
mShowCursor = SystemClock.uptimeMillis();
if (mBlink == null) mBlink = new Blink();
mBlink.removeCallbacks(mBlink);
mBlink.postAtTime(mBlink, mShowCursor + BLINK);
} else {
if (mBlink != null) mBlink.removeCallbacks(mBlink);
}
}
這裏面mBlink是一個實現了runnable的private類,而它恰好是每隔500ms執行一次.
好吧,這麼糾結的代碼,我是寫不了了,不知道哪位大俠遇到過類似的問題,如果我向重寫一下EditText的setCursorVisible,重新寫mBlink,這個咋寫啊?感覺好吃力啊…..
求大神......