How can I do something, 0.5 second after text changed in my EditText?

前端 未结 14 1244
渐次进展
渐次进展 2020-12-23 08:49

I am filtering my list using an EditText. I want to filter the list 0.5 second after user has finished typing in EditText. I used the afterTextChanged

14条回答
  •  被撕碎了的回忆
    2020-12-23 09:27

    Using timer for your case is not the best solution because of creating new object everytime. According to Timer documentation(http://developer.android.com/reference/java/util/Timer.html) it's better to use ScheduledThreadPoolExecutor -

    "Timers schedule one-shot or recurring tasks for execution. Prefer ScheduledThreadPoolExecutor for new code."

    Here is better approach

    Runnable runnabledelayedTask = new Runnable(){
        @Override
        public void run(){
            //TODO perform any operation here
        }
    };
    
    editText.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) { }
    
            private final long DELAY = 500; // milliseconds
    
            @Override
            public void afterTextChanged(final Editable s) {
            ScheduledExecutorService scheduledPool = Executors.newScheduledThreadPool(1);
            ScheduledFuture sf = scheduledPool.schedule(callabledelayedTask, DELAY, TimeUnit.MILLISECONDS);
            //you can cancel ScheduledFuture when needed
            }
        }
    );
    

提交回复
热议问题