Как активно видеть продолжительность, сколько времени нажимаешь кнопку на android - PullRequest
0 голосов
/ 03 апреля 2020

Вот мой код. Я хочу активно видеть, сколько секунд нажмите кнопку, и я хочу сделать это живо. Текстовое представление должно обновляться каждую секунду, если я нажимаю кнопку.

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button = findViewById(R.id.button);
        textView = findViewById(R.id.textView);
        handler = new Handler();
        runnable = new Runnable() {
            @Override
            public void run() {
                textView.setText("Time: "+timer);
                timer++;
            }
        };
        button.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {

                if(event.getAction()==MotionEvent.ACTION_DOWN)
                {
                    while(!button.isPressed())
                    {
                        handler.postDelayed(runnable,1000);
                    }

                }
                else if(event.getAction()==MotionEvent.ACTION_UP)
                {
                    handler.removeCallbacks(runnable);
                }
                return false;
            }
        });
    }

Кстати, этот код пропал без вести sh, потому что пока l oop не работает так, как я хочу. Если я не использую l oop, текстовое представление обновляется только 1 раз. Я хочу, чтобы это обновлялось каждую секунду. Спасибо всем, кто поможет.

1 Ответ

0 голосов
/ 03 апреля 2020

Я нашел решение этой проблемы. Этот метод принадлежит обработчику post (), который запускается, где он есть, избавьте меня от этой проблемы. Есть код.

button.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {

            if(event.getAction()==MotionEvent.ACTION_DOWN)
            {
                handler = new Handler();
                runnable = new Runnable() {
                    @Override
                    public void run() {
                        handler.postDelayed(runnable,1000);
                        textView.setText("Time: "+timer);
                        timer++;

                    }
                };
                handler.post(runnable);

            }
            else if(event.getAction()==MotionEvent.ACTION_UP)
            {
                handler.removeCallbacks(runnable);
            }
            return false;
        }
    });

Когда начинается событие down, запускается метод запуска с него. Метод выполнения более 1 секунды позже, чем из него. Если через 1 секунду все еще нажимается кнопка, обработчик никогда не прекращает выполнение, поэтому запускаемые события начинаются снова и снова. Это простой выполняемый и обработчик l oop.

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