性能问题,将EditText文本保存到数据库

时间:2018-09-20 07:03:25

标签: android

我的Android应用程序中有一个EditText,我在其中使用addTextChangedListener将文本保存到数据库。 但是,每当用户输入键时,事件就会触发。我觉得这是不必要的。

您能告诉我一种更好的方式来在用户完成输入后保存文本吗?

editText.addTextChangedListener(new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        //Sure Not here... 
    }
    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        //Saving text from here ??
    }
    @Override
    public void afterTextChanged(Editable s) {
        //Saving text from here ??
    }
});

2 个答案:

答案 0 :(得分:2)

要提高性能,您可以在每种类型后触发查询时使用延迟,请尝试以下操作:

        editText.addTextChangedListener(object : TextWatcher {

            private var timer = Timer()
            private val DELAY: Long = 300 // milliseconds, 300 are enough

            override fun afterTextChanged(s: Editable?) {}

            override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}

            override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
                timer.cancel()
                timer = Timer()
                timer.schedule(
                        object : TimerTask() {
                            override fun run() {
                                // perform your task here
                                if (s!!.length > 2 || s.isEmpty()) {
                                    // or you can use this character limit check optionally 
                                    }
                                }
                            }
                        },
                        DELAY
                )
            }

        })

谢谢

答案 1 :(得分:2)

最好将输入文本保存在失去焦点的位置,这将确保用户已完成编辑并从该输入字段移出。

 editText.setOnFocusChangeListener(new OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
      if (!hasFocus) {
        // save your data , editText.getText()
      }
    }
 });