2013-02-07 57 views
0

我有兩個editText字段,並在其自己的addTextChangedListeners中具有以下TextWatchers。輸入是正確讀取和處理的,但是我輸入的數字在第二個字段(editText2)中的顯示器上沒有顯示(即使我在等待(sleep()inTextChanged())一會兒,然後繼續設置兩個字段的值將空值設置爲第一個字段的焦點編號在輸入時不顯示在editText字段中(Android 2.2)

在第一個字段中輸入數字會發生什麼:數字在字段中顯示,焦點移動到第二個字段在第二個字段中輸入數字會發生什麼字段:光標(閃爍的垂直線)被凍結,沒有數字顯示,兩秒後:光標移到第一個字段,兩個字段都是空的。除了在第二個字段中輸入的數字應該是顯示然後系統應該凍結顯示該號碼一段時間後,設置爲空,並移動到第一個字段。

什麼是錯,如何解決?

public class Spel extends FragmentActivity { 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    setContentView(R.layout.spel); 

    editText1 = (EditText) findViewById(R.id.editText1); 
editText1.addTextChangedListener(new TextWatcher() { 

    @Override 
    public void onTextChanged(CharSequence s, int start, 
      int before, int count) { 
     if (before==0) { // alleen doen als editText1 leeg was 
      String v = s.toString(); 
      if (v.equals("0") || v.equals("1") || v.equals("2") || v.equals("3") || v.equals("4") || v.equals("5") || v.equals("6") || v.equals("7") || v.equals("8") || v.equals("9")) { 
       editText2.requestFocus(); 
       int baanWorpScore = Integer.parseInt(v); 
       banenWorpScore[0] = baanWorpScore; 
      } 
      else { 
       // blijf wachten op goede invoer 
       editText1.setText(null); 
      }      
     } 

    } 
}); 


    editText2 = (EditText) findViewById(R.id.editText2); 
    editText2.addTextChangedListener(new TextWatcher() { 

@Override 
public void afterTextChanged(Editable s) { 
    // TODO Auto-generated method stub 
    try { 
     Thread.sleep(2000); 
    } catch (InterruptedException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

} 

    @Override 
    public void onTextChanged(CharSequence s, int start, 
     int before, int count) { 
    if (before==0) { 
     String v = s.toString(); 
     if (v.equals("0") || v.equals("1") || v.equals("2") || v.equals("3") || v.equals("4") || v.equals("5") || v.equals("6") || v.equals("7") || v.equals("8") || v.equals("9")) { 
      editText1.requestFocus(); 
      editText1.setText(null); 
      editText2.setText(null); 
      int baanWorpScore = Integer.parseInt(v); 
      banenWorpScore[1] = baanWorpScore; 
     } 
     else { 
      // blijf wachten op goede invoer 
      editText2.setText(null); 
     } 
    } 
}); 
} 

回答

0

實測值以下溶液,把延遲操作中可運行的,傳遞給一個(新)處理的方法postDelayed。這正是我所希望的。請參閱here以獲取幫助我找到解決方案的帖子。

(其實我不知道,如果方法removeCallbacks必須實際調用)

@Override 
public void onTextChanged(CharSequence s, int start, 
     int before, int count) { 

    Runnable mFilterTask = new Runnable() { 

     @Override 
     public void run() { 
       editText1.setText(null); 
       editText2.setText(null); 
       editText1.requestFocus(); 
     }  
    }; 

    Handler mHandler = new Handler(); 

    if (before==0) { 
     String v = s.toString(); 
     if (v.equals("0") || v.equals("1") || v.equals("2") || v.equals("3") || v.equals("4") || v.equals("5") || v.equals("6") || v.equals("7") || v.equals("8") || v.equals("9")) { 
      mHandler.removeCallbacks(mFilterTask); 
      mHandler.postDelayed(mFilterTask, 2000); 

      int baanWorpScore = Integer.parseInt(v); 
      banenWorpScore[1] = baanWorpScore; 
     } 
    } 
} 
相關問題