Как переключать TextView между значениями каждые 5 секунд - PullRequest
1 голос
/ 28 мая 2019

Я не знаю, пользуюсь ли Threads практикой для того, чего я пытаюсь достичь, поэтому, пожалуйста, не стесняйтесь вносить изменения в код, где вы хотите.

Я пытаюсь реализоватьфункция в моем приложении, где TextView переключается на 1 значение и затем возвращается к исходному значению каждые 5 секунд.В потоке я реализовал следующее:

    layoutDate.setText(firstNumber);

    Thread numberSwitch = new Thread() {
    @Override
    public void run() {
        while(!isInterrupted()) {
            try {

                Thread.sleep(5000);

                runOnUiThread(new Runnable () {
                    @Override
                    public void run() {

                        layoutDate.setText(secondNumber);                   

                    }
                });
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }       
    }
};

numberSwitch.start();

Я попытался добавить layoutDate.setText(firstNumber) сразу после runUiOnThread, а также после вложенного run, но он все еще не работает так, как я хочуэто к.

Я хочу добиться чего-то вроде следующего:

Example

Ответы [ 2 ]

1 голос
/ 28 мая 2019

Вы можете использовать Обработчик с работоспособным.

private TextView textView;
private Handler handler;

в вашем onCreate()

textView = findViewById(R.id.tv_bt_msg);
textView.setText("secondNumber");

handler = new Handler();
//Change the textview after 5 seconds
handler.postDelayed(runnable, 5000);

Возможность изменения текста каждые 5 секунд

private Runnable runnable = new Runnable() {
        @Override
        public void run() {
            String currentString = textView.getText().toString();
            if(currentString.equals("secondNumber")){
                currentString = "firstNumber";
            }else{
                currentString = "secondNumber";
            }
            final String tempString = currentString;
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    textView.setText(tempString);
                }
            });
            //Change the textview again after 5 seconds
            handler.postDelayed(runnable, 5000);
        }
    };

Используйте это, чтобы удалить обратные вызовы

handler.removeCallbacks(runnable);
0 голосов
/ 28 мая 2019

Проверьте текущее число, которое находится в поле, и измените его на другое. Это можно сделать, получив значение layoutDate.getText().toString() или используя новую переменную для хранения значения.

layoutDate.setText(firstNumber);

    Thread numberSwitch = new Thread() {
    @Override
    public void run() {
        while(!isInterrupted()) {
            try {

                Thread.sleep(5000);

                runOnUiThread(new Runnable () {
                    @Override
                    public void run() {

                        if(currentNumber == firstNumber){
                            currentNumber = secondNumber;
                        }else{
                            currentNumber = firstNumber;
                        }
                        layoutDate.setText(currentNumber);
                    }
                });
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }       
    }
};

numberSwitch.start();

Или

if(layoutDate.getText().toString().equals(firstNumber+"")){
    layoutDate.set(secondNumber);
}else{
    layoutDate.set(firstNumber);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...