19

我有一个 EditText。当我点击它时,它变得可聚焦。我将键入要输入到 EditText 中的输入文本。我想为 EditText 实现一个监听器,这样当我停止输入时,它应该自动将该文本保存到数据库中,而不是有一个按钮。如何让 EditText 的监听器来监听输入是否停止?

4

4 回答 4

60

像这样试试。

EditText et = (EditText)findViewById(R.id.editText);
Log.e("TextWatcherTest", "Set text xyz");
et.setText("xyz");

et.addTextChangedListener(new TextWatcher() {
    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) { }
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) { }
    @Override
    public void afterTextChanged(Editable s) {
        Log.e("TextWatcherTest", "afterTextChanged:\t" +s.toString());
    }
});
于 2012-01-02T10:13:42.400 回答
18

设置edittext imeOption

editText.setImeOptions(EditorInfo.IME_ACTION_DONE);

通过使用这样的东西,

editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        if (actionId == EditorInfo.IME_ACTION_DONE) {
            // Specify your database function here.
            return true;
        }
        return false;
    }
});

或者,您可以使用该OnEditorActionListener接口来避免匿名内部类。

于 2012-05-16T13:03:51.520 回答
7

将此添加到您的editText

et1.addTextChangedListener(new TextWatcher() {
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

            // TODO Auto-generated method stub
        }

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

            // TODO Auto-generated method stub
        }

        @Override
        public void afterTextChanged(Editable s) {

            // TODO Auto-generated method stub
        }
    });
于 2016-09-24T06:19:40.840 回答
0

您也可以使用Rx java 的debounce运算符。

subject.debounce(300, TimeUnit.MILLISECONDS)
                    .subscribeOn(Schedulers.io())
                    .observeOn(AndroidSchedulers.mainThread())
                    .map(yourString -> {
                           // save to db
                        }
                        return "";
                    })
                    .subscribe()

在这里您可以定义时间限制,在您希望它保存在数据库中的时间之后。

于 2020-03-31T17:06:04.003 回答