java - 从类中更改文本
问题描述
我创建了一个简单的 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();
解决方案
您可以编写一个接口,一个 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。
推荐阅读
- python - 如何获取数据帧的日志和减法?
- java - 使用 IntelliJ 2019.3.1 为 Clion 开发插件。如何为我的插件项目添加 C++ 语言支持?
- django - django中的模板标签与上下文
- python - Python Pandas:合并返回 Nan
- c# - sendMessage_Click 不会创建事件
- rest - 通过 REST API 创建 Google BigQuery 存储过程
- swift - 具有用户选择的文件读写权限的 MacOS 应用程序被 Mac App Store 拒绝,因为 SQLite 在写入数据库时创建了一个临时文件
- node.js - 使用 Firebase 成功进行身份验证后,如何为 Facebook 的 Graph API 生成 accessToken?
- c# - 使用 RSACng 对与 RSACryptoServiceProvider 兼容的数据进行签名
- java - 使用错误产生和 YYERROR_VERBOSE 宏检测野牛中的语法错误