gpt4 book ai didi

java - 如何在 TextView 中最后一次更改后的某个时间调用函数?

转载 作者:行者123 更新时间:2023-12-01 09:47:49 39 4
gpt4 key购买 nike

如果 textView 在一段时间内(比如 25 秒)没有发生任何变化,我只想调用一次函数。我不希望在调用此函数一次后再调用该函数,无论 TextView 在初次调用后发生任何更改。

我试图通过使用计时器和 TextChangedListener 来实现这个目标。这是我到目前为止的代码:

textResult.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

}

@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
//check to cancel timer when there is a new change
shouldTimerReset = true;
}

@Override
public void afterTextChanged(Editable editable) {

CountDownTimer timer = new CountDownTimer(24000, 100) {
@Override
public void onTick(long l) {
if (shouldTimerReset ){
cancel();
}
}

@Override
public void onFinish() {
//call functions
writeToFileExt(textResult.getText().toString());
setButtonLabel(R.id.buttonReadAudio, "Read Audio");
addItemsOnSpinnerModels();
cancel();
//Log.i ("Timer:", "Second timer");

}
}.start();

}
});

我的想法是,每次更改后都会实例化一个新计时器,但由于检查,它将在下一次更改期间在 onTextChanged 上取消,因此最后一个计时器将保持 Activity 状态,它将调用 onFinish 函数。

但是,该函数被调用了几次,我不知道哪里出了问题。逻辑或者代码有问题吗?我该如何解决?任何其他实现最终目标的建议也将不胜感激。我不一定需要使用计时器。最好的方法是什么?

最佳答案

在监听器之外使用处理程序。

import android.os.Handler;

private final Handler handler;


...
handler = new Handler();
...
@Override
public void afterTextChanged(Editable editable) {
handler.removeCallbacksAndMessages(null);
Runnable runnable = new Runnable(){
void run(){
writeToFileExt(textResult.getText().toString());
setButtonLabel(R.id.buttonReadAudio, "Read Audio");
addItemsOnSpinnerModels();
cancel();
}
};
handler.postDelayed(runnable,25000);
}
...

您不需要调用任何 onTextChange 方法,因为之后会调用 afterTextChanged 方法。方法 handler.removeCallbacksAndMessages(null) 将取消队列中所有待处理的可运行对象。文本更改后,新的可运行程序将设置为在 25 秒内运行。如果 afterTextChange 在 25 秒内没有被调用,则 run() 方法中的内容将被执行。

关于java - 如何在 TextView 中最后一次更改后的某个时间调用函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37842221/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com