Android无法运行简单的onTextChange代码

时间:2016-01-15 21:06:50

标签: android android-edittext

public class MainActivity extends AppCompatActivity {
    private EditText addressTextBox;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        addressTextBox = (EditText) findViewById(R.id.editText);

        addressTextBox.addTextChangedListener(addressWatcher);
    }

    private final TextWatcher addressWatcher = new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            addressTextBox.setText("dsa");
        }

        @Override
        public void afterTextChanged(Editable s) {
        }
    };
}

当我更改文本时,它显示我的应用程序没有响应等待/关闭。

  1. 为什么会发生这种情况,我该如何解决?
  2. s方法中onTextChanged代表什么?

2 个答案:

答案 0 :(得分:0)

我可能错了,但似乎是:

public void onTextChanged(CharSequence s, int start, int before, int count) {
        addressTextBox.setText("dsa");
    }

会不断触发自己。意思是文本发生了变化,运行了这个函数,它改变了运行这个函数的文本,等等。

答案 1 :(得分:0)

转到logcat并找到堆栈跟踪,它会告诉您发生了什么。问题可能是因为你在onTextChanged中设置了文本。我不认为这是允许的(我认为你只能在afterTextChanged中更改它),即使它会导致无限递归(因为更改会再次调用观察者)。

至于编辑字段中的文本是什么。阅读https://jsfiddle.net/qr3ao2e3/