2つのeditTextフィールドがあり、独自のaddTextChangedListenersに次のTextWatchersがあります。入力は正しく読み取られて処理されますが、入力した数値は2番目のフィールド(editText2)のディスプレイに表示されません(両方のフィールドの値の設定に進む前にしばらく待っても(afterTextChanged()のsleep())) nullに終了すると、最初のフィールドにフォーカスが設定されます。
最初のフィールドに数値を入力すると、数値がフィールドに表示され、フォーカスが2番目のフィールドに移動します。2番目のフィールドに数字を入力するとどうなりますか:カーソル(垂直線の点滅)がフリーズし、数字が表示されなくなります。2秒後:カーソルが最初のフィールドに移動し、両方のフィールドがすべて空になります。これはすべて、2番目のフィールドに入力された数値が表示され、システムがしばらくの間その数値を表示してからnullに設定され、最初のフィールドに移動することを除いて発生することを意味します。
何が問題で、どのように解決するのですか?
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);
}
}
});
}