Android update TextView in Thread and Runnable

后端 未结 4 458
栀梦
栀梦 2020-11-27 14:18

I want to make a simple timer in Android that updates a TextView every second. It simply counts seconds like in Minesweeper.

The problem is when i ignore the tvTime.

相关标签:
4条回答
  • 2020-11-27 14:19

    Alternatively, you can also just do this in your thread whenever you want to update a UI element:

    runOnUiThread(new Runnable() {
        public void run() {
            // Update UI elements
        }
    });
    
    0 讨论(0)
  • 2020-11-27 14:21

    The UserInterface can only be updated by the UI Thread. You need a Handler, to post to the UI Thread:

    private void startTimerThread() {
        Handler handler = new Handler();
        Runnable runnable = new Runnable() {
            private long startTime = System.currentTimeMillis();
            public void run() {
                while (gameState == GameState.Playing) {  
                    try {
                        Thread.sleep(1000);
                    }    
                    catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    handler.post(new Runnable(){
                        public void run() {
                           tvTime.setText("" + ((System.currentTimeMillis() - this.startTime) / 1000));
                    }
                });
                }
            }
        };
        new Thread(runnable).start();
    }
    
    0 讨论(0)
  • 2020-11-27 14:24

    As an option use runOnUiThread() to change de views properties in the main thread.

      runOnUiThread(new Runnable() {
            @Override
            public void run() {       
                    textView.setText("Stackoverflow is cool!");
            }
        });
    
    0 讨论(0)
  • 2020-11-27 14:32

    You cannot access UI elements from non-UI threads. Try surrounding the call to setText(...) with another Runnable and then look into the View.post(Runnable) method.

    0 讨论(0)
提交回复
热议问题