我不理解我的代码的行为。总而言之,我有一个以“00”开头的editText(代码中的小时数可变)。我正在创建一个线程,以防止此editText没有2位数字。假设此editText的位数不能超过2位。我正在做的是创建一个线程。在这个线程中,每当这个editText没有2个数字(所以是1个数字)时,我会向它添加一个“0”。
然而,每当我在editText上输入一个数字,它就会变得疯狂,进入无限循环和其他我不理解的东西。这是我的代码:
Thread digitLessThanTwoThread; EditText hours = (EditText) findViewById(R.id.hours); digitLessThanTwoThread= new Thread(){ @Override public void run() { while(true) { if (hours.getText().toString().length() != 2 && !hours.isFocused()) { main_activity.runOnUiThread(new Runnable() { @Override public void run() { hours.setText("0" + hours.getText().toString()); } }); } } } }; digitLessThanTwoThread.start();
此外,在最后,editText小时数显示“00”。
这里有两个问题。首先,简单一点:
while(true)
这将以最大功率运行线程,直到您注意到,操作系统开始阻止失控的线程。您应该添加一个 addTextChangedListener()
addTextChangedListener()
更复杂的是:
main_activity.runOnUiThread(new Runnable() { @Override public void run() { hours.setText("0" + hours.getText().toString()); } });
setText() 在之前执行 runOnUiThread() 返回。但是,它是异步的,所以下次循环时 if
setText()
runOnUiThread()
if