我需要一个按钮能够每1-2秒自动运行一次,并且,如果满足if条件(我在该按钮所使用的方法中具有的条件),则必须停止此功能。
我已经尝试过了,但这不是我想要的,因为使用此代码,按钮只能运行一次:
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Consulta.performClick();
}
}, 1000);
点击我的按钮
public void consultaBD(View view)
{
DB db = new DB(getApplicationContext(),null,null,1);
String buscar = text_view.getText().toString();
String[] datos;
datos=db.buscar_reg(buscar.trim());
db.infraccion(buscar.trim());
if(datos[2] =="Encontrado")
{
App.matricula=buscar;
startActivity(new Intent(getApplicationContext(), MatriculasActivity.class));
Toast.makeText(getApplicationContext(),datos[2],Toast.LENGTH_SHORT).show();
}
else
{
Toast.makeText(getApplicationContext(),datos[2],Toast.LENGTH_SHORT).show();
}
}
答案 0 :(得分:0)
另一种方法是使用计时器每x
秒启动一次按钮单击。但是,在此答案中,我将坚持使用您使用的方法。您的处理程序似乎不正确,请尝试如下操作:
将您的处理程序替换为:
private Handler handler = new Handler();
private Runnable runnable = new Runnable() {
@Override
public void run() {
Consulta.performClick();
handler.postDelayed(this, 1000);
}
};
并用以下命令初始化它:(其中1000是每次执行之间的时间(以毫秒为单位)
handler.postDelayed(runnable, 1000);
更新:
您还请求更改文本框内的文本时触发该事件。为此,您需要创建一个新的事件侦听器(确保将field1
替换为对文本框的实际引用):
field1.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start,
int before, int count) {
/* Add the Handler Call here */
handler.postDelayed(runnable, 1000);
}
});
答案 1 :(得分:-1)
无论我了解什么上下文,这里的原始代码都可以为您提供帮助。
Handler handler = new Handler();
//initialize this method once by either clicking on button or as the activity starts
void checkAndPerformClick(boolean conditionFulfilled) {
if (conditionFulfilled) {
handler.removeCallbacksAndMessages(null);
return;
}
handler.postDelayed(new Runnable() {
@Override
public void run() {
Consulta.performClick();
checkAndPerformClick(datosEqualsEncontrado());
}
}, 1000);
}
boolean datosEqualsEncontrado() {
// apply your logic here as the name suggests
return false;
}