Как я могу запускать кнопку автоматически каждую секунду, пока не будет выполнено условие? - PullRequest
0 голосов
/ 20 мая 2019

Мне нужно, чтобы кнопка запускалась автоматически каждые 1-2 секунды, и когда условие if (которое я имею в методе, который используется кнопкой) выполнено, эта функция должна быть остановлена.

Я пробовал это, но это не то, что я хотел, потому что с этим кодом кнопка запускается только один раз:

new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {

            Consulta.performClick();

        }
    }, 1000);

onClick of моей кнопки:

 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();

    }

}

Ответы [ 2 ]

0 голосов
/ 20 мая 2019

в любом контексте, который я понял, вот необработанный код, который может вам помочь.

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;
}
0 голосов
/ 20 мая 2019

Другим методом будет использование таймеров для запуска нажатия кнопки каждые 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);

     }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...