2013-06-25 36 views
1

後,我有一個EditText框,用戶鍵入一個字符串,字符串被髮送到數據庫和UI被更新。我使用了TextChanged功能,並且該功能正常工作。但是,在每次擊鍵後,如果要在最後一次擊鍵之後等待1/2秒以更新要發送到數據庫的字符串,而不是更新UI。任何有關實施的建議?延時用戶輸入

editText.TextChanged += (object sender, Android.Text.TextChangedEventArgs e) => 
{ 
    string text = editText.Text.ToString();     
}; 

回答

3

這可以做到這一點:

new Handler().postDelayed(new Runnable(

    public void run(){ 

     // your update code here.. 

    } 

), 2000); 

代表的毫秒數的代碼將運行前..所以在這種情況下是2秒。

雖然我想你可能會嘗試認爲保存數據,如使用在EditTextonFocusChangeListener一個更好的想法和保存數據後EditText失去專注..

編輯:

當然,上面的代碼應該放在文本更改回調方法中,並且您還應該確保在按下每個按鍵時不會調用定時器。

+0

我是新來這一點,但我不認爲onFocusChangeListener就在這裏工作。它是一個顯示項目列表的單個搜索欄。輸入後,列表將被縮小爲只包含以輸入的字符開頭的字符串。我希望在用戶停止鍵入1/2秒後更新頁面。 –

+0

你說得對onFocusChangeListener你的情況,但你可以更新每個偶數或奇數字符的結果..我不建議你使用延遲,因爲我不認爲這是一個很好的解決方案。 – Cata

+0

我有同樣的問題,這個代碼總是會調用運行(),當你輸入速度快,不是好主意 – vuhung3990

0

在更新UI

012之前可以執行以下操作
new Handler().postDelayed(new Runnable(){ 

       @Override 
       public void run() { 
        //Upadating your ui 

       } 

      }, 500); 
+1

請注意,在主線程(UI線程)上執行該操作會將用戶操作凍結500毫秒或多次睡眠方法設置爲.. – Cata

+1

調用睡眠會阻塞ui線程。不應該調用thread.sleep。 http://developer.android.com/training/articles/perf-anr.html – Raghunandan

+0

哦,謝謝你的提示。這真的很有幫助。看到我編輯的答案可以嗎? – Dulanga

1

實際上,我們可以使用文字觀察家覆蓋功能來解決這個問題

下面是一個例子,以它是如何做到

與完整的描述還附上鍊接

private EditText searchText; 
private TextView resultText; 
private Timer timer; 

     private TextWatcher searchTextWatcher = new TextWatcher() { 
     @Override 
     public void afterTextChanged(Editable arg0) { 
     // user typed: start the timer 
     timer = new Timer(); 
     timer.schedule(new TimerTask() { 
      @Override 
      public void run() { 
       // do required 
      } 
     }, 400); // 400ms delay to before executing run, if user stops typing after 400ms function will get fired 
    } 

    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

    } 

    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 
     // reset timer if user is typing 
     if (timer != null) { 
      timer.cancel(); 
     } 
    } 
}; 

來源:delayed edit text