首页 > 解决方案 > 从类中更改文本

问题描述

我创建了一个简单的 Java 类。这应该花时间。使用 System.out.println 它也可以!但是我怎样才能通知某个 TextView 它也应该改变呢?

Countdown_Test.java

public class Countdown_test {

    private static long START_TIME_IN_MILLIS;
    private CountDownTimer mCountDownTimer;
    private boolean mTimerRunning;
    private long mTimeLeftInMillis;
    //private TextView timer;

    public Countdown_test(long start_time) {
        START_TIME_IN_MILLIS = start_time;
        mTimeLeftInMillis = START_TIME_IN_MILLIS;
        //timer = findViewById(R.id.timer); dosen't work
    }

    public void startTimer() {
        mCountDownTimer = new CountDownTimer(mTimeLeftInMillis, 1000) {
            @Override
            public void onTick(long millisUntilFinished) {
                mTimeLeftInMillis = millisUntilFinished;
                updateCountDownText();
            }
            @Override
            public void onFinish() {
                mTimerRunning = false;
            }
        }.start();
        mTimerRunning = true;
    }

    public void updateCountDownText() {
        int minutes = (int) (mTimeLeftInMillis / 1000) / 60;
        int seconds = (int) (mTimeLeftInMillis / 1000) % 60;
        String timeLeftFormatted = String.format(Locale.getDefault(), "%02d:%02d", minutes, seconds);
        System.out.println(timeLeftFormatted);
    }
}

MainActivity.java

 Countdown_test ct = new Countdown_test(600000);

        button_start.setOnClickListener(v -> {
          
                ct.startTimer();

        });
        ct.updateCountDownText();

标签: javaandroidandroid-studio

解决方案


您可以编写一个接口,一个 TimeLeftListener 和一个方法 onTimeLeftChanged(String timeleft)。然后您的活动扩展 TimeLeftListener 并实现 onTimeLeftChanged() 方法。这是您更新视图的地方。当您启动 CountDownTest 时,您会像这样传递活动。

Countdown_test ct = new Countdown_test(600000, this);

并像这样在您的 CountDownTest 类中创建所有侦听器

myTimeLeftListener =(TimeleftListener)activity;

然后在你的 updateCountDownText()-Method 中你把

myTimeLeftListener.onTimeLeftChanged(timeleft)

您还可以使用 ViewModel 和 LiveData。


推荐阅读